Condividi tramite


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

Cc716799.note(it-it,VS.100).gifNota:
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.

Cc716799.note(it-it,VS.100).gifNota:
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.

Cc716799.note(it-it,VS.100).gifNota:
È 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à EdmSimpleType 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 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)
Elemento EntityType (CSDL)
Oggetti di tipo complesso (Entity Framework)

Altre risorse

Specifiche CSDL, SSDL e MSL
ADO.NET Entity Data Model Tools
complex type (Entity Data Model)