Partager via


Concepts clés du modèle de données d’entité

Le modèle de données d’entité (EDM) utilise trois concepts clés pour décrire la structure des données : type d’entité, type d’association et propriété. Il s’agit des concepts les plus importants dans la description de la structure des données dans n’importe quelle implémentation de l’EDM.

Type d’entité

Le type d’entité est le bloc de construction fondamental pour décrire la structure des données avec le modèle de données d’entité. Dans un modèle conceptuel, les types d’entités sont construits à partir de propriétés et décrivent la structure des concepts de niveau supérieur, tels qu’un client et des commandes dans une application métier. De la même façon qu’une définition de classe dans un programme ordinateur est un modèle pour les instances de la classe, un type d’entité est un modèle pour les entités. Une entité représente un objet spécifique (tel qu’un client ou une commande spécifique). Chaque entité doit avoir une clé d’entité unique au sein d’un jeu d’entités. Un jeu d’entités est une collection d’instances d’un type d’entité spécifique. Les jeux d’entités (et les jeux d’associations) sont regroupés logiquement dans un conteneur d’entités.

L’héritage est pris en charge avec les types d’entités : autrement dit, un type d’entité peut être dérivé d’un autre. Pour plus d’informations, consultez Entity Data Model : Héritage.

Type d'association

Un type d’association (également appelé association) est le bloc de construction fondamental pour décrire les relations dans le modèle de données d’entité. Dans un modèle conceptuel, une association représente une relation entre deux types d’entités (par exemple, Customer and Order). Chaque association a deux extrémités d’association qui spécifient les types d’entités impliqués dans l’association. Chaque fin d’association spécifie également une multiplicité de fin d’association qui indique le nombre d’entités pouvant être à cette fin de l’association. Une multiplicité de fin d’association peut avoir une valeur d’un (1), zéro ou un (0,.1) ou plusieurs (*). Il est possible d’accéder aux entités au niveau de la terminaison d’une association via les propriétés de navigation ou via des clés étrangères si elles sont exposées sur un type d’entité. Pour plus d’informations, consultez Propriété de clé étrangère.

Dans une application, une instance d’une association représente une association spécifique (telle qu’une association entre une instance du client et des instances de commande). Les instances d’association sont regroupées logiquement dans un ensemble d’associations. Les jeux d’associations (et les jeux d’entités) sont regroupés logiquement dans un conteneur d’entités.

Propriété

Les types d’entités contiennent des propriétés qui définissent leur structure et leurs caractéristiques. Par exemple, un type d’entité Client peut avoir des propriétés telles que CustomerId, Name et Address.

Les propriétés d’un modèle conceptuel sont analogues aux propriétés définies sur une classe dans un programme ordinateur. De la même façon que les propriétés d’une classe définissent la forme de la classe et contiennent des informations sur les objets, les propriétés d’un modèle conceptuel définissent la forme d’un type d’entité et contiennent des informations sur les instances de type d’entité.

Une propriété peut contenir des données primitives (comme une chaîne, un entier ou une valeur booléenne) ou des données structurées (par exemple, un type complexe). Pour plus d’informations, consultez Entity Data Model : Types de données primitifs.

Représentations d’un modèle conceptuel

Un modèle conceptuel est une représentation spécifique de la structure de certaines données en tant qu’entités et relations. Une façon de représenter un modèle conceptuel est avec un diagramme. Le diagramme suivant représente un modèle conceptuel avec trois types d’entités (Book, Publisheret Author) et deux associations (PublishedBy et WrittenBy) :

Diagramme montrant un modèle conceptuel avec trois types d’entités.

Toutefois, cette représentation présente quelques lacunes lorsqu’il s’agit de transmettre des détails sur le modèle. Par exemple, les informations de type de propriété et d’ensemble d’entités ne sont pas transmises dans le diagramme. La richesse d’un modèle conceptuel peut être transmise plus clairement avec un langage spécifique à un domaine (DSL). L’ADO.NET Entity Framework utilise une DSL basée sur XML appelée langage de définition de schéma conceptuel (CSDL) pour définir des modèles conceptuels. Voici la définition CSDL du modèle conceptuel dans le diagramme ci-dessus :

  <Schema xmlns="http://schemas.microsoft.com/ado/2008/09/edm"
          xmlns:cg="http://schemas.microsoft.com/ado/2006/04/codegeneration"
          xmlns:store="http://schemas.microsoft.com/ado/2007/12/edm/EntityStoreSchemaGenerator"
          Namespace="BooksModel" Alias="Self">
    <EntityContainer Name="BooksContainer" >
      <EntitySet Name="Books" EntityType="BooksModel.Book" />
      <EntitySet Name="Publishers" EntityType="BooksModel.Publisher" />
      <EntitySet Name="Authors" EntityType="BooksModel.Author" />
      <AssociationSet Name="PublishedBy" Association="BooksModel.PublishedBy">
        <End Role="Book" EntitySet="Books" />
        <End Role="Publisher" EntitySet="Publishers" />
      </AssociationSet>
      <AssociationSet Name="WrittenBy" Association="BooksModel.WrittenBy">
        <End Role="Book" EntitySet="Books" />
        <End Role="Author" EntitySet="Authors" />
      </AssociationSet>
    </EntityContainer>
    <EntityType Name="Book">
      <Key>
        <PropertyRef Name="ISBN" />
      </Key>
      <Property Type="String" Name="ISBN" Nullable="false" />
      <Property Type="String" Name="Title" Nullable="false" />
      <Property Type="Decimal" Name="Revision" Nullable="false" Precision="29" Scale="29" />
      <NavigationProperty Name="Publisher" Relationship="BooksModel.PublishedBy"
                          FromRole="Book" ToRole="Publisher" />
      <NavigationProperty Name="Authors" Relationship="BooksModel.WrittenBy"
                          FromRole="Book" ToRole="Author" />
    </EntityType>
    <EntityType Name="Publisher">
      <Key>
        <PropertyRef Name="Id" />
      </Key>
      <Property Type="Int32" Name="Id" Nullable="false" />
      <Property Type="String" Name="Name" Nullable="false" />
      <Property Type="String" Name="Address" Nullable="false" />
      <NavigationProperty Name="Books" Relationship="BooksModel.PublishedBy"
                          FromRole="Publisher" ToRole="Book" />
    </EntityType>
    <EntityType Name="Author">
      <Key>
        <PropertyRef Name="Name" />
        <PropertyRef Name="Address" />
      </Key>
      <Property Type="String" Name="Name" Nullable="false" />
      <Property Type="String" Name="Address" Nullable="false" />
      <NavigationProperty Name="Books" Relationship="BooksModel.WrittenBy"
                          FromRole="Author" ToRole="Book" />
    </EntityType>
<Association Name="PublishedBy">
      <End Type="BooksModel.Book" Role="Book" Multiplicity="*" />
      <End Type="BooksModel.Publisher" Role="Publisher" Multiplicity="1" />
    </Association>
    <Association Name="WrittenBy">
      <End Type="BooksModel.Book" Role="Book" Multiplicity="*" />
      <End Type="BooksModel.Author" Role="Author" Multiplicity="*" />
    </Association>
  </Schema>

Voir aussi