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. (Obligatoriskt)

    Anmärkning

    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.)

    Anmärkning

    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. Varken ände av en association får vara av komplex typ, vilket innebär att navigeringsegenskaper inte kan 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