Próbowałem przeczytać msdn article na typy złożone. Ale nie wyjaśnia, kiedy go używać. Również nie ma obszernego wyjaśnienia na temat typów złożonych i kiedy ich używać.Co to jest typ złożony w strukturze encji i kiedy go używać?
Odpowiedz
Długie wyjaśnienie znajduje się w artykule MSDN ty połączonego ... więc w zasadzie chcą łatwe wyjaśnienie:
Złożony typ to zestaw właściwości, które istnieją we własnym obiekcie dla C#, ale są odwzorowywane kolumny na już istniejącej tabeli (ta, która zawiera ją), zamiast mieć własną tabelę (która wymagałaby klucza itp.).
Więc wyobraź sobie, że chcesz tej tabeli w bazie danych:
Orders
----------
Id (bigint)
Name (varchar)
Street (varchar)
Region (varchar)
Country (varchar)
Ale chcę tej struktury w C# podmioty:
class Order
{
long Id;
string Name;
struct Address
{
string Street;
string Region;
string Country;
}
}
Więc Address
byłby złożony typ: nie istniałby samodzielnie (nie będzie tabeli Addresses
) w bazie danych ... istniałaby tylko jako zestaw kolumn w tabeli Orders
.
Jak zauważył @HenkHolterman w komentarzach, wartość konieczności złożonych typów jest posiadanie podmiot pojedynczy C#, który może być używany jako wartość dla innych podmiotów zawierających (w moim przykładzie, można mieć Address
w jednostce Supplier
na przykład, ale po prostu będzie mapowany jako zestaw kolumn w tabeli Suppliers
). Ułatwia pracę z wartościami w złożonym typie.
Wadą jest właśnie to: być może będziesz musiał wielokrotnie powtarzać wartości typu złożonego w bazie danych, jeśli zdarzy się, że ten sam Address
(lub jakikolwiek inny typ jakiego używasz) może być współużytkowany przez różne jednostki.
Niezależnie od tego, czy zdecydujesz się na pracę z typami złożonymi, czy osobnymi jednostkami, zależy to od Ciebie i Twojego projektu.
Twoje komentarze na twoją odpowiedź nie mają sensu, wygląda jak @HenkHolterman usunięte jego komentarze – Thomas
Rozważmy ContactDetails
klasę na przykład:
public class ContactDetails
{
public string HomePhone { get; set; }
public string MobilePhone { get; set; }
public string FaxNumber { get; set; }
}
Domyślnie EF potraktuje ContactDetails
jako Jednostki. Oznacza to, że jeśli (przykładowo) masz do Person
klasę z nawigacją własności ContactDetails
typu EF będzie mapować relacji Person.ContactDetails
do innej tabeli (bo Podmiot jest coś, co jest posiadanie tożsamość ITS własne, stąd inne podmioty mogą się do niego odwoływać - a to wymagałoby innej tabeli w kategoriach relacyjnych).
Przez oznaczający ContactDetails
jako typu złożonego Zamiast EF nie będą traktować go jako podmiot, który wymaga związek i zamiast map go do tej samej tabeli rodzica (zawierający) jednostki (Person
w moim przykładzie) skutecznie czyniąc z niego Value Object.
Poniżej znajduje się więcej informacji, chociaż nie jest to odpowiedź bezpośrednio na twoje pytanie - [Związki z EF Code First: Part 2 - Complex Types] (http: //weblogs.asp.net/manavi/association-in-ef-4-1-code-first-part-2-complex-types) –
dziękuję, zagłębię się w to –