Partager via


Procédure : ajouter une requête de définition (Entity Framework)

Cette rubrique décrit comment ajouter une requête de définition et un type d'entité conceptuel correspondant à un fichier .edmx. Une requête de définition vous permet d'exécuter une instruction SQL spécifiée dans l'élément DefiningQuery d'un fichier .edmx. Pour plus d'informations, consultez DefiningQuery Element (EntitiContainer SSDL). Une requête de définition est généralement utilisée pour fournir des fonctionnalités semblables à celles fournies par une vue de base de données. Toutefois, la vue est définie dans le fichier .edmx, et non dans la base de données. Le type d'entité conceptuel permet de surfacer les données exposées par la requête de définition dans la couche conceptuelle.

Cc982038.note(fr-fr,VS.100).gifRemarque :
Toute modification apportée au modèle de stockage, notamment les requêtes de définition, sera remplacée lorsque vous exécutez l'Assistant Mise à jour du modèle.

Les requêtes paramétrées ne peuvent pas être exécutées en tant que requêtes de définition. Par défaut, les données surfacées à l'aide d'une requête de définition sont des données en lecture seule. Toutefois, les données peuvent être mises à jour en mappant les fonctions d'insertion, de mise à jour et de suppression du type d'entité qui surface les données aux procédures stockées. Pour plus d'informations, consultez Procédure : mapper des fonctions de modification à des procédures stockées (Entity Data Model Tools) et Procédure pas à pas : mappage d'une entité aux procédures stockées (Entity Data Model Tools).

Les procédures suivantes fournissent un plan de haut niveau pour l'ajout d'une requête de définition et d'un type d'entité conceptuel à un fichier .edmx. L'exemple qui suit fournit plus d'informations sur les étapes des procédures.

Les procédures supposent que vous avez ouvert un fichier .edmx valide dans Visual Studio.

Ajout d'une requête de définition

Pour ajouter une requête de définition

  1. Ajoutez un élément EntitySet à la section SSDL du fichier .edmx. Spécifiez uniquement les attributs Name et EntityType de l'élément EntitySet. Pour plus d'informations, consultez EntitySet Element (EntityContainer SSDL).

  2. Ajoutez un élément DefiningQuery à l'élément EntitySet récemment ajouté. Spécifiez l'instruction SQL à exécuter dans le corps de l'élément DefiningQuery. Pour plus d'informations, consultez DefiningQuery Element (EntitiContainer SSDL).

  3. Ajoutez un élément EntityType à la section SSDL du fichier .edmx. Cet élément EntityType doit décrire les colonnes retournées par l'instruction SQL dans l'élément DefiningQuery. Pour plus d'informations, consultez EntityType Element (SSDL).

Ajout d'un type d'entité au modèle conceptuel

Pour ajouter un type d'entité conceptuel

  1. Ajoutez un élément EntitySet à la section CSDL du fichier .edmx. Pour plus d'informations, consultez EntitySet Element (EntityContainer CSDL).

  2. Ajoutez un élément EntityType à la section CSDL du fichier .edmx. L'attribut Name doit avoir la même valeur que l'attribut Name de l'élément EntitySet dans l'étape précédente. Les propriétés du type d'entité doivent mapper aux données retournées par l'instruction SQL spécifiée dans l'élément DefiningQuery de la procédure ci-dessus. Pour plus d'informations, consultez EntityType Element (CSDL).

Mappage des types d'entité conceptuels et des types d'entité de stockage

Pour mapper les types d'entité conceptuels et les types d'entité de stockage

  1. Ajoutez un élément EntitySetMapping à la section Mapping du fichier .edmx qui mappe les entités conceptuelles et les entités de stockage dans les deux procédures précédentes. Pour plus d'informations, consultez EntitySetMapping Element (MSL) et Mapping a Conceptual Model to a Storage Schema.

Exemple

L'exemple suivant ajoute une requête de définition au fichier School.edmx pour surfacer les informations sur les notes des étudiants avec un type d'entité GradeReport. Le fichier School.edmx peut être généré en suivant les étapes dans la rubrique Génération du modèle Entity Data Model School du Quickstart d'Entity Framework.

Pour ajouter une requête de définition, ajoutez d'abord l'élément EntitySet suivant (qui contient un élément DefiningQuery) à la section SSDL du fichier .edmx. Notez les points suivants :

  • Seuls les attributs Name et EntityType de l'élément EntitySet sont spécifiés.

  • Le nom qualifié complet du type d'entité est utilisé dans l'attribut EntityType.

  • L'instruction SQL à exécuter est spécifiée dans l'élément DefiningQuery.

<EntitySet Name="GradeReport"
 EntityType="SchoolModel.Store.GradeReport" >
  <DefiningQuery>
    SELECT CourseID, Grade, FirstName, LastName
    FROM StudentGrade
    JOIN
    (SELECT * FROM Person WHERE EnrollmentDate IS NOT NULL) AS p
    ON StudentID = p.PersonID
  </DefiningQuery>
</EntitySet>

Ensuite, ajoutez l'élément EntityType suivant à la section SSDL du fichier .edmx. Notez les points suivants :

  • La valeur de l'attribut Name correspond à la valeur de l'attribut EntityType dans l'élément EntitySet ci-dessus, bien que le nom qualifié complet du type d'entité soit utilisé dans l'attribut EntityType.

  • Les noms de propriétés correspondent aux noms de colonnes retournés par l'instruction SQL dans l'élément DefiningQuery (ci-dessus).

  • Dans cet exemple, la clé d'entité est composée de trois propriétés pour garantir le caractère unique de la valeur de la clé.

<EntityType Name="GradeReport">
  <Key>
    <PropertyRef Name="CourseID" />
    <PropertyRef Name="FirstName" />
    <PropertyRef Name="LastName" />
  </Key>
  <Property Name="CourseID"
            Type="int"
            Nullable="false" />
  <Property Name="Grade"
            Type="decimal"
            Precision="3"
            Scale="2" />
  <Property Name="FirstName"
            Type="nvarchar"
            Nullable="false"
            MaxLength="50" />
  <Property Name="LastName"
            Type="nvarchar"
            Nullable="false"
            MaxLength="50" />
</EntityType>

Pour ajouter un type d'entité au modèle conceptuel, ajoutez d'abord l'élément EntitySet suivant à la section CSDL du fichier .edmx. Notez que le nom qualifié complet du type d'entité est utilisé dans l'attribut EntityType.

<EntitySet Name="GradeReport" EntityType="SchoolModel.GradeReport" />

Ensuite, ajoutez l'élément EntityType suivant à la section CSDL du fichier .edmx. Notez les points suivants :

  • La valeur de l'attribut Name correspond à la valeur de l'attribut EntityType dans l'élément EntitySet ci-dessus, bien que le nom qualifié complet du type d'entité soit utilisé dans l'attribut EntityType.

  • Les noms de propriétés correspondent aux noms de colonnes retournés par l'instruction SQL dans l'élément DefiningQuery (ci-dessus).

  • Dans cet exemple, la clé d'entité est composée de trois propriétés pour garantir le caractère unique de la valeur de la clé.

<EntityType Name="GradeReport">
  <Key>
    <PropertyRef Name="CourseID" />
    <PropertyRef Name="FirstName" />
    <PropertyRef Name="LastName" />
  </Key>
  <Property Name="CourseID"
            Type="Int32"
            Nullable="false" />
  <Property Name="Grade"
            Type="Decimal"
            Precision="3"
            Scale="2" />
  <Property Name="FirstName"
            Type="String"
            Nullable="false"
            MaxLength="50"
            Unicode="true"
            FixedLength="false" />
  <Property Name="LastName"
            Type="String"
            Nullable="false"
            MaxLength="50"
            Unicode="true"
            FixedLength="false" />
</EntityType>

Pour mapper les types d'entité conceptuels et les types d'entité de stockage, ajoutez l'élément EntitySetMapping suivant à la section Mapping du fichier .edmx.

<EntitySetMapping Name="GradeReport">
  <EntityTypeMapping TypeName="IsTypeOf(SchoolModel.GradeReport)">
    <MappingFragment StoreEntitySet="GradeReport">
      <ScalarProperty Name="CourseID" ColumnName="CourseID" />
      <ScalarProperty Name="Grade" ColumnName="Grade" />
      <ScalarProperty Name="FirstName" ColumnName="FirstName" />
      <ScalarProperty Name="LastName" ColumnName="LastName" />
    </MappingFragment>
  </EntityTypeMapping>
</EntitySetMapping>

Le type d'entité GradeReport est désormais ajouté au modèle School. Notez que les données surfacées via le type d'entité GradeReport sont en lecture seule.

Voir aussi

Concepts

Présentation d'un fichier .edmx (Entity Framework)

Autres ressources

Modification d'un fichier .edmx manuellement (Entity Framework)