Partager via


Élément ComplexType (CSDL)

Un élément ComplexType définit une structure de données composée de propriétés EdmSimpleType ou d'autres types complexes. Pour plus d'informations sur EdmSimpleType, consultez Types de modèle conceptuel. Un type complexe peut être une propriété d'un type d'entité ou d'un autre type complexe. Un type complexe est semblable à un type d'entité du fait qu'un type complexe définit des données. Toutefois, il existe des différences clés entre les types complexes et les types d'entités :

  • Les types complexes n'ont pas d'identité (ni de clés), par conséquent, ils ne peuvent pas exister indépendamment. Les types complexes peuvent uniquement exister en tant que propriétés de types d'entités ou d'autres types complexes.

  • Les types complexes ne peuvent pas participer à des associations. Aucune terminaison d'association ne peut être un type complexe ; par conséquent, il n'est pas possible de définir des propriétés de navigation pour des types complexes.

  • Une propriété de type complexe ne peut pas avoir de valeur NULL, bien que les propriétés scalaires d'un type complexe puissent chacune être définie sur NULL.

Un élément ComplexType peut avoir les éléments enfants suivants (dans l'ordre répertorié) :

Le tableau ci-dessous décrit les attributs qui peuvent s'appliquer à l'élément ComplexType.

Nom d'attribut Requis Valeur

Name

Oui

Nom du type complexe. Le nom d'un type complexe ne peut pas être identique au nom d'un autre type complexe, d'un type d'entité ou d'une association qui figure dans l'étendue du modèle.

BaseType

Non

Nom d'un autre type complexe qui est le type de base du type complexe en cours de définition.

Cc716799.note(fr-fr,VS.100).gifRemarque :
Cet attribut n'est pas applicable dans la version du langage CSDL spécifiée par l'espace de noms https://schemas.microsoft.com/ado/2006/04/edm.L'héritage pour les types complexes n'est pas pris en charge dans cette version.

Abstract

Non

True ou False (valeur par défaut) selon que le type complexe est un type abstrait ou non.

Cc716799.note(fr-fr,VS.100).gifRemarque :
Cet attribut n'est pas applicable dans la version du langage CSDL spécifiée par l'espace de noms https://schemas.microsoft.com/ado/2006/04/edm.Les types complexes dans cette version ne peuvent pas être des types abstraits.

Cc716799.note(fr-fr,VS.100).gifRemarque :
Un nombre quelconque d'attributs d'annotation (attributs XML personnalisés) peut être appliqué à l'élément ComplexType.Toutefois, les attributs personnalisés ne peuvent pas appartenir à un espace de noms XML réservé pour le langage CSDL.Les noms qualifiés complets de deux attributs personnalisés quelconques ne peuvent pas être identiques.

Exemple

L'exemple ci-dessous illustre un type complexe, Address, avec les propriétés EdmSimpleType StreetAddress, City, StateOrProvince, Country et 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>

Pour définir le type complexe Address (ci-dessus) en tant que propriété d'un type d'entité, vous devez déclarer le type de propriété dans la définition de type d'entité. L'exemple suivant montre la propriété Address sous la forme d'un type complexe sur un type d'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>

Voir aussi

Concepts

Vue d'ensemble d'Entity Framework
Spécification CSDL
Élément Schema (CSDL)
Élément EntityType (CSDL)
Objets de type complexe (Entity Framework)

Autres ressources

Spécifications CSDL, SSDL et MSL
ADO.NET Entity Data Model Tools
complex type (Entity Data Model)