Élément QueryView (EntitySetMapping)
Dans le modèle EDM (Modèle de données d'entité), l'élément QueryView d'un élément EntitySetMapping définit un mappage en lecture seule entre une entité du modèle conceptuel et une entité du modèle de stockage. Vous définissez ce mappage d'affichages des requêtes avec une requête Entité SQL évaluée par rapport au modèle de stockage et vous exprimez le jeu de résultats en termes d'entité dans le modèle conceptuel. Les affichages des requêtes étant en lecture seule, les types qu'ils définissent ne peuvent pas être mis à jour au moyen des commandes de mise à jour standard. Les mises à jour de ces types peuvent être effectuées au moyen de fonctions de modification. Pour plus d'informations, voir Procédure : mapper des fonctions de modification à des procédures stockées.
Vous pouvez définir des affichages des requêtes pour activer les scénarios suivants :
Définir une entité du modèle conceptuel qui n'inclut pas toutes les propriétés de l'entité dans le modèle de stockage. Cela inclut les propriétés qui n'ont pas de valeurs par défaut et qui ne prennent pas en charge les valeurs null.
Mapper des colonnes calculées du modèle de stockage aux propriétés de types d'entités du modèle conceptuel.
Définir un mappage dans lequel les conditions utilisées pour partitionner des entités du modèle conceptuel ne sont pas basées sur l'égalité. Lorsque vous spécifiez un mappage conditionnel à l'aide de l'élément Condition, la condition fournie doit être égale à la valeur spécifiée. Pour plus d'informations, voir Élément Condition (MappingFragment).
Mapper la même colonne du modèle de stockage à plusieurs types du modèle conceptuel.
Mapper plusieurs types à la même table.
Définir des associations dans le modèle conceptuel qui ne sont pas basées sur des clés étrangères du schéma relationnel.
Utiliser une logique métier personnalisée pour définir la valeur de propriétés du modèle conceptuel. Par exemple, vous pouvez mapper la valeur de chaîne « T » de la source de données à la valeur true, valeur booléenne du modèle conceptuel.
Définir des filtres conditionnels pour les résultats de la requête.
Appliquer moins de restrictions sur les données dans le modèle conceptuel que dans le modèle de stockage. Par exemple, vous pouvez rendre une propriété du modèle conceptuel nullable même si la colonne à laquelle elle est mappée ne prend pas en charge les valeurs null.
Vous devez tenir compte des points suivants lorsque vous définissez des affichages des requêtes pour les entités :
Les affichages des requêtes sont en lecture seule. Les mises à jour des entités ne peuvent être effectuées qu'au moyen de fonctions de modification.
Lorsque vous définissez un type d'entité par un affichage des requêtes, vous devez également définir toutes les entités associées par les affichages des requêtes.
Lorsque vous mappez une association plusieurs-à-plusieurs à une entité du modèle de stockage qui représente une table de liens dans le schéma relationnel, vous devez définir un élément QueryView dans l'élément AssociationSetMapping pour cette table de liens. Pour plus d'informations, voir Élément QueryView (AssociationSetMapping).
Les affichages des requêtes doivent être définis pour tous les types d'une hiérarchie des types. Pour ce faire, vous pouvez procéder de différentes façons :
Avec un seul élément QueryView spécifiant une seule requête Entité SQL que retourne une union de tous les types d'entités dans la hiérarchie.
Avec un seul élément QueryView spécifiant une seule requête Entité SQL qui utilise l'opérateur CASE pour retourner un type d'entité spécifique dans la hiérarchie en fonction d'une condition spécifique.
Avec un élément QueryView supplémentaire pour un type spécifique de la hiérarchie. Dans ce cas, utilisez l'attribut TypeName de l'élément QueryView pour spécifier le type d'entité de chaque affichage.
Lors de la définition d'un affichage des requêtes, vous ne pouvez pas spécifier l'attribut StorageSetName sur l'élément EntitySetMapping.
Lors de la définition d'un affichage des requêtes, l'élément EntitySetMapping ne peut pas aussi contenir de mappages Property.
L'exemple suivant définit un affichage des requêtes pour le type d'entité Product dans le modèle de vente AdventureWorks Sales Model.
<EntitySetMapping Name="Product">
<QueryView>
SELECT VALUE AdventureWorksModel.Product(P.ProductID,
P.Name, P.ProductNumber, P.Color, P.ListPrice, P.Size, P.Weight,
P.Style)
FROM Person.Product as P
</QueryView>
</EntitySetMapping>
Étant donné que la requête retourne uniquement un sous-ensemble des membres du type Product du modèle de stockage, le type Product du modèle de vente AdventureWorks Sales Model a été modifié en fonction de ce mappage, comme suit :
<EntityType Name="Product">
<Key>
<PropertyRef Name="ProductID" />
</Key>
<Property Name="ProductID" Type="Int32" Nullable="false" />
<Property Name="Name" Type="String" Nullable="false" MaxLength="50" Unicode="true" FixedLength="false" />
<Property Name="ProductNumber" Type="String" Nullable="false" MaxLength="25" Unicode="true" FixedLength="false" />
<Property Name="Color" Type="String" MaxLength="15" Unicode="true" FixedLength="false" />
<Property Name="ListPrice" Type="Decimal" Nullable="false" Precision="19" Scale="4" />
<Property Name="Size" Type="String" MaxLength="5" Unicode="true" FixedLength="false" />
<Property Name="Weight" Type="Decimal" Precision="8" Scale="2" />
<Property Name="Style" Type="String" MaxLength="2" Unicode="true" FixedLength="true" />
</EntityType>
Le type Product du modèle de stockage de l'exemple de modèle de vente AdventureWorks Sales Model n'a pas été modifié pour cet exemple.
Voir aussi
Concepts
Scénarios de mappage EDM (Entity Data Model) (Scénarios d'application)
Élément EntitySetMapping (MSL)