Condividi tramite


tipo complesso

Un tipo complesso è un modello per la definizione di proprietà avanzate e strutturate sui tipi di entità o su altri tipi complessi. Ogni modello contiene quanto segue:

  • Un nome univoco. (obbligatorio).

    Annotazioni

    Il nome di un tipo complesso non può essere uguale al nome di un tipo di entità all'interno dello stesso spazio dei nomi.

  • Dati sotto forma di una o più proprietà. (Facoltativo.

    Annotazioni

    Una proprietà di un tipo complesso può essere un altro tipo complesso.

Un tipo complesso è simile a un tipo di entità in cui un tipo complesso può trasportare un payload di dati sotto forma di proprietà di tipo primitivo o altri tipi complessi. Esistono tuttavia alcune differenze principali tra tipi complessi e tipi di entità:

  • I tipi complessi non dispongono di identità e pertanto non possono esistere in modo indipendente. I tipi complessi possono esistere solo come proprietà nei tipi di entità o in altri tipi complessi.

  • I tipi complessi non possono partecipare alle associazioni. Nessuna delle due estremità di un'associazione può essere un tipo complesso e pertanto le proprietà di navigazione non possono essere definite su tipi complessi.

Esempio

Il ADO.NET Entity Framework usa un linguaggio specifico del dominio (DSL) denominato linguaggio CSDL (Conceptual Schema Definition Language) per definire modelli concettuali. Il file CSDL seguente definisce un tipo complesso, Address, con le proprietà del tipo primitivo StreetAddress, City, StateOrProvince, Country e 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>

Per definire il tipo Address complesso (sopra) come proprietà in un tipo di entità, è necessario dichiarare il tipo di proprietà nella definizione del tipo di entità. Il file CSDL seguente dichiara la Address proprietà come tipo complesso su un tipo di entità (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>

Vedere anche