Freigeben über


hinzugefügt

Ein komplexer Typ ist eine Vorlage zum Definieren umfangreicher, strukturierter Eigenschaften für Entitätstypen oder für andere komplexe Typen. Jede Vorlage enthält Folgendes:

  • Ein eindeutiger Name. (Erforderlich)

    Hinweis

    Der Name eines komplexen Typs darf nicht mit einem Entitätstypnamen innerhalb desselben Namespaces identisch sein.

  • Daten in Form einer oder mehrerer Eigenschaften. (Fakultativ.)

    Hinweis

    Eine Eigenschaft eines komplexen Typs kann ein anderer komplexer Typ sein.

Ein komplexer Typ ähnelt einem Entitätstyp, in dem ein komplexer Typ eine Datennutzlast in Form von primitiven Typeigenschaften oder anderen komplexen Typen tragen kann. Es gibt jedoch einige wichtige Unterschiede zwischen komplexen Typen und Entitätstypen:

  • Komplexe Typen besitzen keine Identitäten und können daher nicht unabhängig voneinander vorhanden sein. Komplexe Typen können nur als Eigenschaften für Entitätstypen oder andere komplexe Typen vorhanden sein.

  • Komplexe Typen können nicht an Zuordnungen teilnehmen. Kein Ende einer Zuordnung kann ein komplexer Typ sein, daher können Navigationseigenschaften nicht für komplexe Typen definiert werden.

Beispiel

Das ADO.NET Entity Framework verwendet eine domänenspezifische Sprache (DSL), die als konzeptuelle Schemadefinitionssprache (CSDL) bezeichnet wird, um konzeptionelle Modelle zu definieren. Die folgende CSDL definiert einen komplexen Typ, Address, mit den primitiven Typeigenschaften StreetAddress, , City, StateOrProvince, Countryund 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>

Um den komplexen Typ Address (oben) als Eigenschaft für einen Entitätstyp zu definieren, müssen Sie den Eigenschaftstyp in der Entitätstypdefinition deklarieren. Die folgende CSDL deklariert die Address Eigenschaft als komplexer 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>

Siehe auch