type complexe

Un type complexe est un modèle permettant de définir des propriétés riches et structurées sur des types d’entités ou d’autres types complexes. Chaque modèle contient les informations suivantes :

  • Nom unique. (Obligatoire)

    Notes

    Le nom d'un type complexe ne peut pas être le même qu'un nom de type d'entité dans le même espace de noms.

  • Données sous la forme d’une ou plusieurs propriétés. (Facultatif.)

    Notes

    Une propriété d'un type complexe peut être un autre type complexe.

Un type complexe est semblable à un type d'entité en ce sens qu'il peut acheminer une charge utile de données sous la forme de propriétés de type primitif ou d'autres types complexes. 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é et, par conséquent, ne peuvent pas exister indépendamment. Les types complexes peuvent uniquement exister en tant que propriétés sur des types d'entités ou d'autres types complexes.

  • Les types complexes ne peuvent pas participer à des associations. Aucune terminaison d’une association ne peut être un type complexe ; par conséquent, les propriétés de navigation ne peuvent pas être définies sur des types complexes.

Exemple

ADO.NET Entity Framework utilise un langage spécifique à un domaine (DSL), appelé CSDL (Conceptual Schema Definition Language), pour définir des modèles conceptuels. Le CSDL suivant définit un type complexe, Address, avec les propriétés de type primitif 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é sur un type d'entité, vous devez déclarer le type de propriété dans la définition de type d'entité. Le CSDL suivant déclare la propriété Address en tant que 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