2014-12-09 14 views
5

Momentan lerne ich viel über das Entity Framework von Videos auf Pluralsight, also entschuldige meine Frage, die vielleicht neuartig aussieht, aber ich kann nicht verstehen, was komplexe Typen sind oder warum ich sie brauchen würde Sie.Was sind komplexe Typen im Kontext mit Entity Framework

Ich weiß, dass ich sie über Anmerkungen oder Fluent Api etwas wie dies zur Karte haben:

modelBuilder.ComplexType<blubb>(); 

Vielleicht könnte jemand die Notwendigkeit komplexer Typen für mich das näher erläutern?

Antwort

4

Angenommen, Sie haben eine Entität für Kurse in einer Klasse, diese Entität hat skalare Eigenschaften für Ort, Tage und Zeit, aber Sie möchten diese abstrahieren, damit andere Entitäten dasselbe Modell verwenden können. Sie können also einen komplexen Typ erstellen, der Tage, Ort und Zeit enthält. Geben Sie ihm einen Namen: ComplexType1. Nun können andere Entitäten diesen Typ anstatt einzelner Skalareigenschaften verwenden, indem Sie einfach ComplexType1 in der Modelldefinition deklarieren.

+1

Danke für die gute Antwort. Im Tutorial wurde nicht erwähnt, dass ich diesen komplexen Typ für mehr als eine Entity verwenden kann, deshalb wusste ich nicht, wie es überhaupt nützlich sein sollte :) – CodeFanatic

+1

Upvote um darauf hinzuweisen, dass andere Entitäten das Modell auch verwenden können . – Hans

5

Komplexe Typen wiederholen strukturelle Muster in Ihrer Datenbank. Sie müssen sie benutzerdefiniert zuordnen, da sie nicht abgeleitet werden können.

wäre ein Beispiel zwei Tabellen, die beiden Adressen bezogenen Spalten haben:

Firma

CompanyName 
AddressLine1 
AddressLine2 
Postcode 

Account Manager

Name 
TelephoneNumber 
SuperiorName 
AddressLine1 
AddressLine2 
Postcode 

Dies ist natürlich nicht gut normalisierte Datenbank Design, aber solche Situationen auftreten. Sie können das Modell für die Adresse in einen komplexen Typ abstrahieren und dann angeben, dass sowohl Company als auch AccountManager diesen komplexen Typ haben, anstatt die übereinstimmenden (wenn auch in der Datenbank getrennten) Spalten für jede Tabelle mit Adressspalten zuzuordnen.

Hier ist ein tiefer gehende Artikel über Komplexe Typen: http://msdn.microsoft.com/en-gb/data/jj680147.aspx

Und hier ist eine, die nicht ganz so schwer sind, und zeigt den Nutzen der Abbildung zwei Adressen auf einem Modell, Dinge wie das: http://visualstudiomagazine.com/articles/2014/04/01/making-complex-types-useful.aspx

1

Komplexe Typen sind Typen, die nicht wie Entitäten einer Tabelle zugeordnet sind, sondern einem oder mehreren Feldern zugeordnet sind.

Der folgende komplexe Typ

public class Descriptor 
{ 
    public string Name {get;set;} 
    public string Description {get;set;} 
} 

Und Entität

public class MyEntity 
{ 
    public Descriptor { get;set;} 
} 

Diese auf einen Tisch mit Name und Description Feldern zuordnen würden. Es ist ein nützlicher Weg, um einen Typ von gemeinsamen Feldern/Eigenschaften zu kapseln, die Sie für mehrere Entitäten benötigen.

+0

Das Beispiel der MYEntity-Klasse ist falsch, da es sich nicht auf einen bekannten Complex-Typ bezieht. –

+0

Sorry, ich muss eine halb editierte Antwort gespeichert haben. –