Partager via


Implémentation d'entités (EDM)

Dans toutes les applications EDM (Modèle de données d'entité), les entités sont définies en CSDL (Conceptual Schema Definition Language) et mappées aux métadonnées qui décrivent les structures de données en SSDL (Store Schema Definition Language). Cet exemple illustre la conception d'une entité unique et la façon dont elle est mappée à un stockage.

L'application pour laquelle cet exemple d'entité est conçu définit les informations relatives aux employés d'une entreprise de gestion.

Schéma conceptuel

L'entité définie dans la syntaxe CSDL (Conceptual Schema Definition Language) suivante contient la spécification du type de données de l'attribut Namespace nommé Employes. L'attribut Namespace contient une seule déclaration EntityType : Employees.

Les propriétés de l'entité Employees contiennent les informations de base identifiant un employé. La propriété EmployeeId est déclarée en tant que Guid qui identifie de façon unique une instance du type. La propriété EmployeeId est balisée en tant que clé.

Trois propriétés supplémentaires identifient les employés par prénom (FirstName), par nom de famille (LastName) et par adresse de messagerie (Email).

Outre la spécification de l'entité, un schéma CSDL contient des déclarations EntitySet et EntityContainer. Les éléments EntityContainer et EntitySet définissent l'étendue des types de données du modèle de données. L'élément EntityContainer contient l'élément EntitySet. Dans cet exemple, un élément EntitySet nommé Employees contient le type Employee.

<?xml version="1.0" encoding="utf-8"?>
<Schema Namespace="Employees" Alias="Self" xmlns="https://schemas.microsoft.com/ado/2006/04/edm">
  <EntityContainer Name="EmployeesContext">
    <EntitySet Name="Employees" EntityType="Employees.Employees" />
  </EntityContainer>
  <EntityType Name="Employees">
    <Key>
      <PropertyRef Name="EmployeeId" />
    </Key>
    <Property Name="EmployeeId" Type="Guid" Nullable="false" />
    <Property Name="LastName" Type="String" Nullable="false" />
    <Property Name="FirstName" Type="String" Nullable="false" />
    <Property Name="Email" Type="String" Nullable="false" />
  </EntityType>
</Schema>

Le schéma Namespace contient l'entité Employee et tous les jeux excepté le jeu EntityContainer, lequel est distinct et indépendant du schéma Namespace. Pour plus d'informations sur l'élément EntityContainer, voir Élément EntityContainerMapping (MSL).

Les applications générées sur ce modèle de données référencent l'espace de noms Namespace pour utiliser la classe basée sur ce modèle.

Cette spécification CSDL est appelée schéma conceptuel ou structure de schéma. Dans la syntaxe SSDL, les noms d'entités parallèles des métadonnées de stockage correspondent aux structures de stockage. L'élément EntitySet de ce schéma CSDL correspond au nom d'une table spécifiée dans le schéma SSDL. La table contient des données d'instances de l'entité Employee utilisée par les applications basées sur le modèle. Les propriétés de l'entité Employee correspondent aux colonnes de la table.

Schéma de magasin

En SSDL, les métadonnées de stockage décrivent la base de données qui contient les instances des employés (Employees) définis dans le schéma conceptuel.

L'espace de noms Employees.Store défini dans le schéma suivant est la base de données cible du modèle Employees qui a été définie dans le schéma conceptuel.

La valeur EntitySetEmployees de ce schéma représente une table de données nommée Employees. L'élément EntityType spécifié par ce schéma correspond à l'élément EntityType défini dans le schéma conceptuel. Le nom spécifié dans les métadonnées de stockage ne doit pas nécessairement correspondre au nom spécifié dans le schéma conceptuel, mais il doit correspondre au nom de la table de base de données.

Le schéma suivant décrit un objet de base de données dbo représenté par l'élément EntityContainer spécifié dans le fichier SSDL. L'élément EntityContainer de cet exemple contient une table nommée Employees.

?xml version="1.0" encoding="utf-8"?>
<Schema Namespace="Employees.Store" Alias="Self"
    Provider="System.Data.SqlClient"
    ProviderManifestToken="2005"
    xmlns="https://schemas.microsoft.com/ado/2006/04/edm/ssdl">
  <EntityContainer Name="dbo">
    <EntitySet Name="Employees" EntityType="Employees.Store.Employees" />
  </EntityContainer>
  <EntityType Name="Employees">
    <Key>
      <PropertyRef Name="EmployeeId" />
    </Key>
    <Property Name="EmployeeId" Type="uniqueidentifier" Nullable="false" />
    <Property Name="LastName" Type="nvarchar" Nullable="false" MaxLength="50" />
    <Property Name="FirstName" Type="nvarchar" Nullable="false" />
    <Property Name="Email" Type="nvarchar" Nullable="false" />
  </EntityType>
</Schema>

Spécification de mappage

La spécification de mappage est définie en MSL (Mapping Specification Language). Cette spécification MSL connecte le schéma CSDL à la base de données à l'aide des métadonnées du schéma SSDL.

Les éléments de ce schéma MSL incluent l'élément EntityContainerMapping, l'élément StorageEntityContainer, l'élément EntityTypeMapping, un élément MappingFragment et des mappages ScalarProperty. L'élément EntityContainerMapping mappe un élément CdmEntityContainer à un élément StorageEntityContainer ; dans le cas présente, le conteneur d'entités EmployeeSkills à l'objet de base de données dbo.

Notez que les noms attribués aux éléments StorageEntityContainer et CdmEntityContainer ne sont pas qualifiés par les espaces de noms de schémas. StorageEntityContainer et CdmEntityContainer sont séparés et indépendants de l'élément de schéma aussi bien dans le schéma conceptuel que dans les métadonnées de stockage. L'utilisation d'un nom d'espace de noms pour qualifier le nom d'un élément StorageEntityContainer et CdmEntityContainer provoquera une exception de mappage.

Suite au mappage de****StorageEntityContainer et de CdmEntityContainer, l'élément EntitySetMapping spécifie l'élément StoreEntitySet qui correspond au

TypeName conceptuel, Employees.

Les propriétés de l'élément TypeName sont mappées par les éléments ScalarProperty en tant qu'attributs Name correspondant à un élément ColumnName, par exemple Name="EmployeeId" ColumnName="EmployeeId". La syntaxe Name spécifie une propriété d'une entité dans le schéma conceptuel, et ColumnName spécifie une colonne de la table de données Employees de la base de données cible.

<?xml version="1.0" encoding="utf-8"?>
<Mapping Space="C-S" 
     xmlns="urn:schemas-microsoft-com:windows:storage:mapping:CS">

  <EntityContainerMapping StorageEntityContainer="dbo"
        CdmEntityContainer="EmployeesContext">
    <EntitySetMapping Name="Employees" StoreEntitySet="Employees"
        TypeName="Employees.Employees">

      <ScalarProperty Name="EmployeeId" ColumnName="EmployeeId" />
      <ScalarProperty Name="LastName" ColumnName="LastName" />
      <ScalarProperty Name="FirstName" ColumnName="FirstName" />
      <ScalarProperty Name="Email" ColumnName="Email" />

    </EntitySetMapping>
  </EntityContainerMapping>
</Mapping>

Voir aussi

Concepts

Implémentation d'associations (EDM)

Autres ressources

Schémas et spécification de mappage (Entity Framework)
Spécifications EDM