Dela via


komplex typ

En komplex typ är en mall för att definiera omfattande, strukturerade egenskaper för entitetstyper eller för andra komplexa typer. Varje mall innehåller följande:

  • Ett unikt namn. (Krävs)

    Kommentar

    Namnet på en komplex typ får inte vara samma som ett entitetstypnamn inom samma namnområde.

  • Data i form av en eller flera egenskaper. (Valfritt.)

    Kommentar

    En egenskap av en komplex typ kan vara en annan komplex typ.

En komplex typ liknar en entitetstyp eftersom en komplex typ kan bära en datanyttolast i form av primitiva typegenskaper eller andra komplexa typer. Det finns dock några viktiga skillnader mellan komplexa typer och entitetstyper:

  • Komplexa typer har inga identiteter och kan därför inte finnas oberoende av varandra. Komplexa typer kan bara finnas som egenskaper för entitetstyper eller andra komplexa typer.

  • Komplexa typer kan inte delta i associationer. Ingen av slutet av en association kan vara en komplex typ, och därför kan navigeringsegenskaper inte definieras för komplexa typer.

Exempel

ADO.NET Entity Framework använder ett domänspecifikt språk (DSL) som kallas CSDL (Conceptual Schema Definition Language) för att definiera konceptuella modeller. Följande CSDL definierar en komplex typ, Adress, med egenskaperna StreetAddressprimitiv typ , , CityStateOrProvince, Countryoch 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>

Om du vill definiera den komplexa typen Address (ovan) som en egenskap för en entitetstyp måste du deklarera egenskapstypen i entitetstypdefinitionen. Följande CSDL deklarerar Address egenskapen som en komplex typ av en entitetstyp (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>

Se även