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):
Documentation (zero o un elemento)
Property (zero o più elementi)
Elementi Annotation (zero o più elementi)
Nella tabella riportata di seguito vengono descritti gli attributi che è possibile applicare all'elemento ComplexType.
Nome attributo | È obbligatorio | Valore |
---|---|---|
Name |
Sì |
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.
Nota:
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.
Nota:
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à 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)