Share via


Elemento ComplexType (CSDL)

Un elemento ComplexType definisce una struttura di dati composta da proprietà di tipo EdmSimpleType o altri tipi complessi.Per ulteriori informazioni sul tipo EdmSimpleType, vedere Tipi del modello concettuale (CSDL).Un tipo complesso può essere una proprietà di un tipo di entità o un altro tipo complesso.Un tipo complesso è simile a un tipo di entità in quanto il tipo complesso definisce i dati.Tuttavia esistono alcune differenze importanti tra i tipi complessi e i tipi di entità:

  • I tipi complessi non dispongono di identità o chiavi e pertanto non possono esistere indipendentemente.I tipi complessi possono esistere solo come proprietà di tipi di entità o gli altri tipi complessi.

  • I tipi complessi non possono far parte di associazioni.Le entità finali di un'associazione non possono essere tipi complessi, di conseguenza non è possibile definire proprietà di navigazione per i tipi complessi.

  • Una proprietà di tipo complesso non può avere un valore null, sebbene ogni proprietà scalare di un tipo complesso possa essere impostata su Null.

Un elemento ComplexType può includere i seguenti elementi figlio (nell'ordine elencato):

Nella tabella riportata di seguito vengono descritti gli attributi che è possibile applicare all'elemento ComplexType.

Nome attributo

È obbligatorio

Valore

Name

Nome del tipo complesso.Il nome di un tipo complesso non può essere uguale a quello di un altro tipo complesso, di un tipo di entità o di un'associazione che si trova entro l'ambito del modello.

BaseType

No

Nome di un altro tipo complesso che è il tipo di base del tipo complesso definito.

NotaNota
Questo attributo non è applicabile nella versione CSDL specificata dallo spazio dei nomi https://schemas.microsoft.com/ado/2006/04/edm.L'ereditarietà per i tipi complessi non è supportata in quella versione.

Abstract

No

True o False (valore predefinito) a seconda che il tipo complesso sia o meno un tipo astratto.

NotaNota
Questo attributo non è applicabile nella versione CSDL specificata dallo spazio dei nomi https://schemas.microsoft.com/ado/2006/04/edm.I tipi complessi in quella versione non possono essere tipi astratti.

Nota

È possibile applicare un qualsiasi numero di attributi di annotazione (attributi XML personalizzati) all'elemento ComplexType.Tuttavia, gli attributi personalizzati non possono appartenere ad alcuno spazio dei nomi XML riservato a CSDL.I nomi completi per due attributi personalizzati qualsiasi non possono essere uguali.

Esempio

Nell'esempio seguente viene mostrato un tipo complesso, Address, con le proprietà EdmSimpleTypeStreetAddress, 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 complesso Address (sopra) come una proprietà di un tipo di entità, è necessario dichiarare il tipo di proprietà nella definizione del tipo di entità.Nell'esempio seguente viene mostrata la proprietà Address come un tipo complesso di 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

Concetti

Panoramica su Entity Framework

Specifiche CSDL

Elemento Schema (CSDL)

tipo complesso

Elemento EntityType (CSDL)

Altre risorse

Specifiche CSDL, SSDL e MSL

Strumenti di ADO.NET Entity Data Model

Oggetti di tipo complesso