Komplexer Typ
Ein komplexer Typ ist eine Vorlage zum Definieren von umfangreichen, strukturierten Eigenschaften für Entitätstypen oder andere komplexe Typen. Jede Vorlage enthält Folgendes:
Eine eindeutige Bezeichnung. (Erforderlich)
Hinweis
Der Name eines komplexen Typs darf nicht mit dem Namen eines Entitätstyps innerhalb des gleichen Namespace übereinstimmen.
Daten in Form einer oder mehrerer Eigenschaften. (Optional.)
Hinweis
Eine Eigenschaft eines komplexen Typs kann ein anderer komplexer Typ sein.
Ein komplexer Typ ähnelt insofern einem Entitätstyp, als ein komplexer Typ eine Datennutzlast in Form von primitiven Typeigenschaften oder anderen komplexen Typen enthalten kann. Es gibt jedoch einige Hauptunterschiede zwischen komplexen Typen und Entitätstypen:
Komplexe Typen weisen keine Identitäten auf und können daher nicht unabhängig sein. Komplexe Typen können nur Eigenschaften von Entitätstypen oder anderen komplexen Typen sein.
Komplexe Typen können nicht Teil von Zuordnungen sein. Die Enden einer Zuordnung können kein komplexer Typ sein. Daher können für komplexe Typen keine Navigationseigenschaften definiert werden.
Beispiel
Das ADO.NET Entity Framework verwendet eine domänenspezifische Sprache (DSL) mit der Bezeichnung „konzeptionelle Schemadefinitionssprache“ (CSDL), um konzeptionelle Modelle zu definieren. Die folgende CSDL definiert einen komplexen Typ, Adress, mit den primitiven Typeigenschaften StreetAddress
, City
, StateOrProvince
, Country
und PostalCode
.
<ComplexType Name="Address" >
<Property Type="String" Name="StreetAddress" Nullable="false" />
<Property Type="String" Name="City" Nullable="false" />
<Property Type="String" Name="StateOrProvince" Nullable="false" />
<Property Type="String" Name="Country" Nullable="false" />
<Property Type="String" Name="PostalCode" Nullable="false" />
</ComplexType>
Deklarieren Sie den Eigenschaftentyp in der Entitätstypdefinition, um den komplexen Typ Address
(oben) als Eigenschaft für einen Entitätstyp zu definieren. Die folgende CSDL deklariert die Address
-Eigenschaft als komplexen Typ für einen Entitätstyp (Publisher):
<EntityType Name="Publisher">
<Key>
<PropertyRef Name="Id" />
</Key>
<Property Type="Int32" Name="Id" Nullable="false" />
<Property Type="String" Name="Name" Nullable="false" />
<Property Type="BooksModel.Address" Name="Address" Nullable="false" />
<NavigationProperty Name="Books" Relationship="BooksModel.PublishedBy"
FromRole="Publisher" ToRole="Book" />
</EntityType>