2016-06-14 4 views
15

Ich habe versucht, die msdn article auf komplexen Typen zu lesen. Aber es erklärt nicht, wann man es benutzt. Es gibt auch keine umfassende Erklärung zu komplexen Typen im Web und wann sie zu verwenden sind.Was ist ein komplexer Typ in Entity-Framework und wann es zu verwenden?

+1

Im Folgenden finden Sie weitere Details, die jedoch nicht direkt auf Ihre Frage antworten - [Verknüpfungen in EF-Code zuerst: Teil 2 - Komplexe Typen] (http: //weblogs.asp.net/manavi/associations-in-ef-4-1-code-first-part-2-complex-types) –

+0

danke ich werde mich darum kümmern –

Antwort

23

Die lange Erklärung ist in dem MSDN-Artikel, der Sie verknüpfen ..., so dass Sie im Grunde eine einfache Erklärung wollen:

Ein komplexer Typ eine Reihe von Eigenschaften, die für C# in einem eigenen Objekt existieren, sind aber abzubildenden Spalten in einer bereits vorhandenen Tabelle (die für die Entität, die sie enthält), anstatt eine eigene Tabelle zu haben (die einen Schlüssel usw. benötigen würde).

So vorstellen, wollen Sie diese Tabelle auf der Datenbank:

Orders 
---------- 
Id (bigint) 
Name (varchar) 
Street (varchar) 
Region (varchar) 
Country (varchar) 

Aber wollen diese Struktur in den C# Einheiten:

class Order 
{ 
    long Id; 
    string Name; 

    struct Address 
    { 
    string Street; 
    string Region; 
    string Country; 
    } 
} 

So gibt Address wäre ein komplexer Typ sein: es würde nicht existieren allein (es gäbe keine Addresses Tabelle) auf der Datenbank ... es würde nur als eine Reihe von Spalten auf der Orders Tabelle existieren.

Wie @HenkHolterman in den Kommentaren erwähnt, wird der Wert komplexe Typen mit einer einzigen C# Einheit, die als Wert für andere enthält Einheiten verwendet werden kann (in meinem Beispiel, könnten Sie eine Address in einer Supplier Einheit haben zum Beispiel, aber es wird nur als eine Reihe von Spalten in der Tabelle Suppliers zugeordnet werden). Es erleichtert die Arbeit mit den Werten des komplexen Typs.

Der Nachteil ist genau das: Sie müssen möglicherweise die komplexen Typ Werte mehrmals in der Datenbank wiederholen, wenn es vorkommen kann, dass ein Address (oder welcher andere Typ Sie verwenden) kann unter verschiedenen Entitäten geteilt werden.

Ob Sie mit komplexen Typen oder separaten Entitäten arbeiten, liegt ganz bei Ihnen und Ihrem Design.

+1

Ihre Kommentare zu Ihrer Antwort machen keinen Sinn, sieht aus wie @HenkHolterman gelöscht seine Kommentare – Thomas

7

Betrachten Sie diese ContactDetails Klasse zum Beispiel:

public class ContactDetails 
{ 
    public string HomePhone { get; set; } 
    public string MobilePhone { get; set; } 
    public string FaxNumber { get; set; } 
} 

standardmäßig EF ContactDetails als Entity behandeln. Das bedeutet, dass, wenn (zum Beispiel) Sie Person Klasse mit einer Navigations-Eigenschaft ContactDetails Art haben sollte, EF die Person.ContactDetails Beziehung zu einer anderen Tabelle abbildet (weil Entity etwas ist, das eine Identität seines ist mit besitzen, daher können sich andere Entitäten darauf beziehen - und dies würde eine andere Tabelle in relationalen Begriffen erfordern.

von ContactDetails als komplexer Typ bezeichnet stattdessen EF behandeln wird es nicht mehr als eine Einheit, die eine Beziehung und stattdessen wo es sich auf der gleichen Tabelle der Mutter (enthält) Einheit (Person in meinem Beispiel) erfordert, macht es effektiv zu einem Value Object.

Verwandte Themen