Spécification SSDL

SSDL (Store Schema Definition Language) est un langage basé sur XML qui décrit le modèle de stockage d'une application Entity Framework.

Dans une application Entity Framework, les métadonnées du modèle de stockage sont chargées à partir d’un fichier .ssdl (écrit en SSDL) dans une instance de la classe System.Data.Metadata.Edm.StoreItemCollection et accessibles à l’aide de méthodes dans la classe System.Data.Metadata.Edm.MetadataWorkspace. Entity Framework utilise des métadonnées de modèle de stockage pour traduire des requêtes par rapport au modèle conceptuel pour stocker des commandes spécifiques au magasin.

Entity Framework Designer (EF Designer) stocke les informations du modèle de stockage dans un fichier .edmx au moment de la conception. Au moment de la génération, le Concepteur d’entités utilise des informations dans un fichier .edmx pour créer le fichier .ssdl requis par Entity Framework au moment de l’exécution.

Les versions de SSDL sont différenciées par les espaces de noms XML.

SSDL Version Espace de noms XML
SSDL v1 https://schemas.microsoft.com/ado/2006/04/edm/ssdl
SSDL v2 https://schemas.microsoft.com/ado/2009/02/edm/ssdl
SSDL v3 https://schemas.microsoft.com/ado/2009/11/edm/ssdl

Association, élément (SSDL)

Un élément Association dans le langage SSDL (Store Schema Definition Language) spécifie les colonnes de table qui participent à une contrainte de clé étrangère dans la base de données sous-jacente. Deux éléments End enfants obligatoires spécifient des tables aux terminaisons de l'association et la multiplicité à chaque terminaison. Un élément ReferentialConstraint facultatif spécifie les terminaisons principales et dépendantes de l'association ainsi que les colonnes participantes. Si aucun élément ReferentialConstraint n’est présent, un élément AssociationSetMapping doit être utilisé pour spécifier les mappages de colonnes pour l’association.

L’élément Association peut avoir les éléments enfants suivants (dans l’ordre répertorié) :

  • Documentation (zéro ou un élément) ;
  • End (exactement deux éléments) ;
  • ReferentialConstraint (zéro ou un élément) ;
  • éléments d'annotation (zéro, un ou plusieurs).

Attributs applicables

Le tableau suivant décrit les attributs qui peuvent être appliqués à l’élément Association .

Nom de l'attribut Est obligatoire Valeur
Nom Oui Nom de la contrainte de clé étrangère correspondante dans la base de données sous-jacente.

Notes

Un nombre quelconque d’attributs d’annotation (attributs XML personnalisés) peut être appliqué à l’élément Association . Toutefois, les attributs personnalisés ne peuvent pas appartenir à un espace de noms XML réservé pour le langage SSDL. Les noms qualifiés complets de deux attributs personnalisés quelconques ne peuvent pas être identiques.

Exemple

L’exemple suivant montre un élément Association qui utilise un élément ReferentialConstraint pour spécifier les colonnes qui participent à la contrainte de clé étrangère FK_CustomerOrders :

 <Association Name="FK_CustomerOrders">
   <End Role="Customers"
        Type="ExampleModel.Store.Customers" Multiplicity="1">
     <OnDelete Action="Cascade" />
   </End>
   <End Role="Orders"
        Type="ExampleModel.Store.Orders" Multiplicity="*" />
   <ReferentialConstraint>
     <Principal Role="Customers">
       <PropertyRef Name="CustomerId" />
     </Principal>
     <Dependent Role="Orders">
       <PropertyRef Name="CustomerId" />
     </Dependent>
   </ReferentialConstraint>
 </Association>

AssociationSet, élément (SSDL)

L’élément AssociationSet dans le langage SSDL (Store Schema Definition Language) représente une contrainte de clé étrangère entre deux tables de la base de données sous-jacente. Les colonnes de la table qui participent à la contrainte de clé étrangère sont spécifiées dans un élément Association. L’élément Association qui correspond à un élément AssociationSet donné est spécifié dans l’attribut Association de l’élément AssociationSet .

Les ensembles d'associations SSDL sont mappés aux ensembles d'associations CSDL par un élément AssociationSetMapping. Toutefois, si l’association CSDL pour un jeu d’association CSDL donné est définie à l’aide d’un élément ReferentialConstraint, aucun élément AssociationSetMapping correspondant n’est nécessaire. Dans ce cas, si un élément AssociationSetMapping est présent, les mappages qu’il définit seront remplacés par l’élément ReferentialConstraint .

L’élément AssociationSet peut avoir les éléments enfants suivants (dans l’ordre répertorié) :

  • Documentation (zéro ou un élément) ;
  • End (zéro ou deux éléments) ;
  • éléments d'annotation (zéro, un ou plusieurs).

Attributs applicables

Le tableau suivant décrit les attributs qui peuvent être appliqués à l’élément AssociationSet .

Nom de l'attribut Est obligatoire Valeur
Nom Oui Nom de la contrainte de clé étrangère que l'ensemble d'associations représente.
Association Oui Nom de l'association qui définit les colonnes qui participent à la contrainte de clé étrangère.

Notes

Un nombre quelconque d’attributs d’annotation (attributs XML personnalisés) peut être appliqué à l’élément AssociationSet . Toutefois, les attributs personnalisés ne peuvent pas appartenir à un espace de noms XML réservé pour le langage SSDL. Les noms qualifiés complets de deux attributs personnalisés quelconques ne peuvent pas être identiques.

Exemple

L’exemple suivant montre un élément AssociationSet qui représente la FK_CustomerOrders contrainte de clé étrangère dans la base de données sous-jacente :

 <AssociationSet Name="FK_CustomerOrders"
                 Association="ExampleModel.Store.FK_CustomerOrders">
   <End Role="Customers" EntitySet="Customers" />
   <End Role="Orders" EntitySet="Orders" />
 </AssociationSet>

CollectionType, élément (SSDL)

L’élément CollectionType dans le langage SSDL (Store Schema Definition Language) spécifie que le type de retour d’une fonction est une collection. L’élément CollectionType est un enfant de l’élément ReturnType. Le type de collection est spécifié à l’aide de l’élément enfant RowType :

Notes

Un nombre quelconque d’attributs d’annotation (attributs XML personnalisés) peut être appliqué à l’élément CollectionType . Toutefois, les attributs personnalisés ne peuvent pas appartenir à un espace de noms XML réservé pour le langage SSDL. Les noms qualifiés complets de deux attributs personnalisés quelconques ne peuvent pas être identiques.

Exemple

L’exemple suivant montre une fonction qui utilise un élément CollectionType pour spécifier que la fonction retourne une collection de lignes.

   <Function Name="GetProducts" IsComposable="true" Schema="dbo">
     <ReturnType>
       <CollectionType>
         <RowType>
           <Property Name="ProductID" Type="int" Nullable="false" />
           <Property Name="CategoryID" Type="bigint" Nullable="false" />
           <Property Name="ProductName" Type="nvarchar" MaxLength="40" Nullable="false" />
           <Property Name="UnitPrice" Type="money" />
           <Property Name="Discontinued" Type="bit" />
         </RowType>
       </CollectionType>
     </ReturnType>
   </Function>

CommandText, élément (SSDL)

L’élément CommandText dans le langage de définition de schéma (SSDL) est un enfant de l’élément Function qui vous permet de définir une instruction SQL exécutée sur la base de données. L’élément CommandText vous permet d’ajouter des fonctionnalités similaires à une procédure stockée dans la base de données, mais vous définissez l’élément CommandText dans le modèle de stockage.

L’élément CommandText ne peut pas avoir d’éléments enfants. Le corps de l’élément CommandText doit être une instruction SQL valide pour la base de données sous-jacente.

Aucun attribut n’est applicable à l’élément CommandText .

Exemple

L’exemple suivant montre un élément Function avec un élément CommandText enfant. Exposez la fonction UpdateProductInOrder en tant que méthode sur ObjectContext en l’important dans le modèle conceptuel.  

 <Function Name="UpdateProductInOrder" IsComposable="false">
   <CommandText>
     UPDATE Orders
     SET ProductId = @productId
     WHERE OrderId = @orderId;
   </CommandText>
   <Parameter Name="productId"
              Mode="In"
              Type="int"/>
   <Parameter Name="orderId"
              Mode="In"
              Type="int"/>
 </Function>

DefiningQuery, élément (SSDL)

L’élément DefinitionQuery dans le langage SSDL (Store Schema Definition Language) vous permet d’exécuter une instruction SQL directement dans la base de données sous-jacente. L’élément DefinedQuery est couramment utilisé comme une vue de base de données, mais la vue est définie dans le modèle de stockage au lieu de la base de données. La vue définie dans un élément DefinedQuery peut être mappée à un type d’entité dans le modèle conceptuel via un élément EntitySetMapping. Ces mappages sont en lecture seule.  

La syntaxe SSDL suivante montre la déclaration d’un EntitySet suivi de l’élément DefinitionQuery qui contient une requête utilisée pour récupérer l’affichage.

 <Schema>
     <EntitySet Name="Tables" EntityType="Self.STable">
         <DefiningQuery>
           SELECT  TABLE_CATALOG,
                   'test' as TABLE_SCHEMA,
                   TABLE_NAME
           FROM    INFORMATION_SCHEMA.TABLES
         </DefiningQuery>
     </EntitySet>
 </Schema>

Vous pouvez utiliser des procédures stockées dans Entity Framework pour activer des scénarios en lecture-écriture sur des vues. Vous pouvez utiliser une vue de source de données ou une vue Entity SQL comme table de base pour récupérer des données et pour modifier le traitement par des procédures stockées.

Vous pouvez utiliser l’élément DefiningQuery pour cibler Microsoft SQL Server Compact 3.5. Bien que SQL Server Compact 3.5 ne prend pas en charge les procédures stockées, vous pouvez implémenter des fonctionnalités similaires avec l’élément DefiningQuery. Cet élément peut s'avérer également utile pour créer des procédures stockées afin de surmonter une incompatibilité entre les types de données utilisés dans le langage de programmation et ceux de la source de données. Vous pouvez écrire un jeu de paramètres DefiningQuery qui prend un certain ensemble de paramètres, puis appelle une procédure stockée avec un autre ensemble de paramètres, par exemple une procédure stockée qui supprime des données.

Élément Dependent (SSDL)

L’élément Dépendant dans le langage SSDL ( Store Schema Definition Language) est un élément enfant à l’élément ReferentialConstraint qui définit la fin dépendante d’une contrainte de clé étrangère (également appelée contrainte référentielle). L’élément Dependent spécifie la colonne (ou les colonnes) dans une table qui référence une colonne clé primaire (ou des colonnes). Les éléments PropertyRef spécifient les colonnes référencées. L’élément Principal spécifie les colonnes clés primaires référencées par des colonnes spécifiées dans l’élément Dépendant .

L’élément Dependent peut avoir les éléments enfants suivants (dans l’ordre indiqué) :

  • PropertyRef (un ou plusieurs) ;
  • éléments d'annotation (zéro, un ou plusieurs).

Attributs applicables

Le tableau suivant décrit les attributs qui peuvent être appliqués à l’élément Dependent .

Nom de l'attribut Est obligatoire Valeur
Rôle Oui Même valeur que l’attribut Role (s’il est utilisé) de l’élément End correspondant ; sinon, nom de la table qui contient la colonne de référencement.

Notes

Un nombre quelconque d’attributs d’annotation (attributs XML personnalisés) peut être appliqué à l’élément Dépendant . Toutefois, les attributs personnalisés ne peuvent pas appartenir à un espace de noms XML réservé pour le langage CSDL. Les noms qualifiés complets de deux attributs personnalisés quelconques ne peuvent pas être identiques.

Exemple

L’exemple suivant montre un élément Association qui utilise un élément ReferentialConstraint pour spécifier les colonnes qui participent à la contrainte de clé étrangère FK_CustomerOrders. L’élément Dependent spécifie la colonne CustomerId de la table Order comme fin dépendante de la contrainte.

 <Association Name="FK_CustomerOrders">
   <End Role="Customers"
        Type="ExampleModel.Store.Customers" Multiplicity="1">
     <OnDelete Action="Cascade" />
   </End>
   <End Role="Orders"
        Type="ExampleModel.Store.Orders" Multiplicity="*" />
   <ReferentialConstraint>
     <Principal Role="Customers">
       <PropertyRef Name="CustomerId" />
     </Principal>
     <Dependent Role="Orders">
       <PropertyRef Name="CustomerId" />
     </Dependent>
   </ReferentialConstraint>
 </Association>

Documentation, élément (SSDL)

L’élément Documentation du langage SSDL (Store Schema Definition Language) peut être utilisé pour fournir des informations sur un objet défini dans un élément parent.

L’élément Documentation peut avoir les éléments enfants suivants (dans l’ordre indiqué) :

  • Résumé : brève description de l’élément parent. (zéro ou un élément).
  • LongDescription : description complète de l’élément parent. (zéro ou un élément).

Attributs applicables

Un nombre quelconque d’attributs d’annotation (attributs XML personnalisés) peut être appliqué à l’élément Documentation . Toutefois, les attributs personnalisés ne peuvent pas appartenir à un espace de noms XML réservé pour le langage CSDL. Les noms qualifiés complets de deux attributs personnalisés quelconques ne peuvent pas être identiques.

Exemple

L’exemple suivant montre l’élément Documentation en tant qu’élément enfant d’un élément EntityType.

 <EntityType Name="Customers">
   <Documentation>
     <Summary>Summary here.</Summary>
     <LongDescription>Long description here.</LongDescription>
   </Documentation>
   <Key>
     <PropertyRef Name="CustomerId" />
   </Key>
   <Property Name="CustomerId" Type="int" Nullable="false" />
   <Property Name="Name" Type="nvarchar(max)" Nullable="false" />
 </EntityType>

End, élément (SSDL)

L’élément End dans le langage SSDL (Store Schema Definition Language) spécifie la table et le nombre de lignes à une extrémité d’une contrainte de clé étrangère dans la base de données sous-jacente. L’élément End peut être un enfant de l’élément Association ou de l’élément AssociationSet. Dans chaque cas, les éléments enfants et les attributs applicables possibles sont différents.

Élément End comme enfant de l'élément Association

Un élément End (en tant qu’enfant de l’élément Association ) spécifie la table et le nombre de lignes à la fin d’une contrainte de clé étrangère avec les attributs Type et Multiplicity respectivement. Les terminaisons d'une contrainte de clé étrangère sont définies dans le cadre d'un ensemble d'associations SSDL ; un ensemble d'associations SSDL doit avoir exactement deux terminaisons.

Un élément End peut avoir les éléments enfants suivants (dans l’ordre indiqué) :

  • Documentation (zéro ou un élément) ;
  • OnDelete (zéro ou un élément) ;
  • éléments d'annotation (zéro, un ou plusieurs éléments).

Attributs applicables

Le tableau suivant décrit les attributs qui peuvent être appliqués à l’élément End lorsqu’il est l’enfant d’un élément Association .

Nom de l'attribut Est obligatoire Valeur
Type Oui Nom complet du jeu d'entités SSDL qui est à la terminaison de la contrainte de clé étrangère.
Rôle Non Valeur de l’attribut Role dans l’élément Principal ou Dépendant de l’élément ReferentialConstraint correspondant (le cas échéant).
Multiplicité Oui 1, 0..1 ou * selon le nombre de lignes pouvant être à la fin de la contrainte de clé étrangère.
1 indique qu’il existe exactement une ligne à la fin de la contrainte de clé étrangère.
0..1 indique que zéro ou une ligne existe à la fin de la contrainte de clé étrangère.
* indique que zéro, une ou plusieurs lignes existent à la fin de la contrainte de clé étrangère.

Notes

Un nombre quelconque d’attributs d’annotation (attributs XML personnalisés) peut être appliqué à l’élément End . Toutefois, les attributs personnalisés ne peuvent pas appartenir à un espace de noms XML réservé pour le langage CSDL. Les noms qualifiés complets de deux attributs personnalisés quelconques ne peuvent pas être identiques.

Exemple

L’exemple suivant montre un élément Association qui définit la contrainte de clé étrangère FK_CustomerOrders. Les valeurs de multiplicité spécifiées sur chaque élément End indiquent que de nombreuses lignes de la table Orders peuvent être associées à une ligne de la table Customers , mais qu’une seule ligne de la table Customers peut être associée à une ligne dans la table Orders . En outre, l’élément OnDelete indique que toutes les lignes de la table Orders qui référencent une ligne particulière dans la table Customers seront supprimées si la ligne de la table Customers est supprimée.

 <Association Name="FK_CustomerOrders">
   <End Role="Customers"
        Type="ExampleModel.Store.Customers" Multiplicity="1">
     <OnDelete Action="Cascade" />
   </End>
   <End Role="Orders"
        Type="ExampleModel.Store.Orders" Multiplicity="*" />
   <ReferentialConstraint>
     <Principal Role="Customers">
       <PropertyRef Name="CustomerId" />
     </Principal>
     <Dependent Role="Orders">
       <PropertyRef Name="CustomerId" />
     </Dependent>
   </ReferentialConstraint>
 </Association>

Élément End comme enfant de l'élément AssociationSet

L’élément End (en tant qu’enfant de l’élément AssociationSet ) spécifie une table à une extrémité d’une contrainte de clé étrangère dans la base de données sous-jacente.

Un élément End peut avoir les éléments enfants suivants (dans l’ordre indiqué) :

  • Documentation (zéro ou un élément) ;
  • éléments d'annotation (zéro, un ou plusieurs).

Attributs applicables

Le tableau suivant décrit les attributs qui peuvent être appliqués à l’élément End lorsqu’il est l’enfant d’un élément AssociationSet .

Nom de l'attribut Est obligatoire Valeur
EntitySet ; Oui Nom du jeu d'entités SSDL qui est à la terminaison de la contrainte de clé étrangère.
Rôle Non Valeur de l’un des attributs Role spécifiés sur un élément End de l’élément Association correspondant.

Notes

Un nombre quelconque d’attributs d’annotation (attributs XML personnalisés) peut être appliqué à l’élément End . Toutefois, les attributs personnalisés ne peuvent pas appartenir à un espace de noms XML réservé pour le langage CSDL. Les noms qualifiés complets de deux attributs personnalisés quelconques ne peuvent pas être identiques.

Exemple

L’exemple suivant montre un élément EntityContainer avec un élément AssociationSet avec deux éléments End :

 <EntityContainer Name="ExampleModelStoreContainer">
   <EntitySet Name="Customers"
              EntityType="ExampleModel.Store.Customers"
              Schema="dbo" />
   <EntitySet Name="Orders"
              EntityType="ExampleModel.Store.Orders"
              Schema="dbo" />
   <AssociationSet Name="FK_CustomerOrders"
                   Association="ExampleModel.Store.FK_CustomerOrders">
     <End Role="Customers" EntitySet="Customers" />
     <End Role="Orders" EntitySet="Orders" />
   </AssociationSet>
 </EntityContainer>

EntityContainer, élément (SSDL)

Un élément EntityContainer dans le langage SSDL (Store Schema Definition Language) décrit la structure de la source de données sous-jacente dans une application Entity Framework : les jeux d’entités SSDL (définis dans les éléments EntitySet) représentent des tables dans une base de données, les types d’entités SSDL (définis dans les éléments EntityType) représentent des lignes dans une table et des jeux d’associations (définis dans les éléments AssociationSet) représentent des contraintes de clé étrangère dans une base de données. Un conteneur d'entités de modèle de stockage est mappé à un conteneur d'entités de modèle conceptuel via l'élément EntityContainerMapping.

Un élément EntityContainer peut avoir zéro ou un élément documentation. Si un élément Documentation est présent, il doit précéder tous les autres éléments enfants.

Un élément EntityContainer peut avoir zéro ou plusieurs éléments enfants suivants (dans l’ordre répertorié) :

  • EntitySet ;
  • AssociationSet ;
  • éléments d'annotation.

Attributs applicables

Le tableau ci-dessous décrit les attributs qui peuvent être appliqués à l’élément EntityContainer .

Nom de l'attribut Est obligatoire Valeur
Nom Oui Nom du conteneur d'entités. Ce nom ne peut pas contenir de point (.).

Notes

Un nombre quelconque d’attributs d’annotation (attributs XML personnalisés) peut être appliqué à l’élément EntityContainer . Toutefois, les attributs personnalisés ne peuvent pas appartenir à un espace de noms XML réservé pour le langage SSDL. Les noms qualifiés complets de deux attributs personnalisés quelconques ne peuvent pas être identiques.

Exemple

L’exemple suivant montre un élément EntityContainer qui définit deux jeux d’entités et un jeu d’associations. Notez que les noms de type d'entité et de type d'association sont qualifiés par le nom de l'espace de noms du modèle conceptuel.

 <EntityContainer Name="ExampleModelStoreContainer">
   <EntitySet Name="Customers"
              EntityType="ExampleModel.Store.Customers"
              Schema="dbo" />
   <EntitySet Name="Orders"
              EntityType="ExampleModel.Store.Orders"
              Schema="dbo" />
   <AssociationSet Name="FK_CustomerOrders"
                   Association="ExampleModel.Store.FK_CustomerOrders">
     <End Role="Customers" EntitySet="Customers" />
     <End Role="Orders" EntitySet="Orders" />
   </AssociationSet>
 </EntityContainer>

EntitySet, élément (SSDL)

Un élément EntitySet dans le langage SSDL (Store Schema Definition Language) représente une table ou une vue dans la base de données sous-jacente. Un élément EntityType en SSDL représente une ligne dans la table ou la vue. L’attribut EntityType d’un élément EntitySet spécifie le type d’entité SSDL particulier qui représente les lignes d’un jeu d’entités SSDL. Le mappage entre un jeu d'entités CSDL et un jeu d'entités SSDL est spécifié dans un élément EntitySetMapping.

L’élément EntitySet peut avoir les éléments enfants suivants (dans l’ordre répertorié) :

  • Documentation (zéro ou un élément) ;
  • DefiningQuery (zéro ou un élément) ;
  • éléments d'annotation.

Attributs applicables

Le tableau suivant décrit les attributs qui peuvent être appliqués à l’élément EntitySet .

Notes

Certains attributs (non répertoriés ici) peuvent être qualifiés avec l’alias de magasin . Ces attributs sont utilisés par l'Assistant Mise à jour du modèle lors de la mise à jour d'un modèle.

Nom de l'attribut Est obligatoire Valeur
Nom Oui Nom du jeu d'entités.
EntityType Oui Nom qualifié complet du type d'entité pour lequel le jeu d'entités contient des instances.
Schéma Non Schéma de base de données.
Table Non Table de base de données.

Notes

Un nombre quelconque d’attributs d’annotation (attributs XML personnalisés) peut être appliqué à l’élément EntitySet . Toutefois, les attributs personnalisés ne peuvent pas appartenir à un espace de noms XML réservé pour le langage SSDL. Les noms qualifiés complets de deux attributs personnalisés quelconques ne peuvent pas être identiques.

Exemple

L’exemple suivant montre un élément EntityContainer qui a deux éléments EntitySet et un élément AssociationSet :

 <EntityContainer Name="ExampleModelStoreContainer">
   <EntitySet Name="Customers"
              EntityType="ExampleModel.Store.Customers"
              Schema="dbo" />
   <EntitySet Name="Orders"
              EntityType="ExampleModel.Store.Orders"
              Schema="dbo" />
   <AssociationSet Name="FK_CustomerOrders"
                   Association="ExampleModel.Store.FK_CustomerOrders">
     <End Role="Customers" EntitySet="Customers" />
     <End Role="Orders" EntitySet="Orders" />
   </AssociationSet>
 </EntityContainer>

EntityType, élément (SSDL)

Un élément EntityType dans le langage SSDL (Store Schema Definition Language) représente une ligne dans une table ou une vue de la base de données sous-jacente. Un élément EntitySet en SSDL représente la table ou la vue dans laquelle les lignes résultent. L’attribut EntityType d’un élément EntitySet spécifie le type d’entité SSDL particulier qui représente les lignes d’un jeu d’entités SSDL. Le mappage entre un type d'entité SSDL et un type d'entité CSDL est spécifié dans un élément EntityTypeMapping.

L’élément EntityType peut avoir les éléments enfants suivants (dans l’ordre répertorié) :

  • Documentation (zéro ou un élément) ;
  • Key (zéro ou un élément) ;
  • éléments d'annotation.

Attributs applicables

Le tableau ci-dessous décrit les attributs qui peuvent être appliqués à l’élément EntityType .

Nom de l'attribut Est obligatoire Valeur
Nom Oui Le nom du type d’entité. Cette valeur est habituellement la même que le nom de la table dans laquelle le type d'entité représente une ligne. Cette valeur ne peut pas contenir de point (.).

Notes

Un nombre quelconque d’attributs d’annotation (attributs XML personnalisés) peut être appliqué à l’élément EntityType . Toutefois, les attributs personnalisés ne peuvent pas appartenir à un espace de noms XML réservé pour le langage SSDL. Les noms qualifiés complets de deux attributs personnalisés quelconques ne peuvent pas être identiques.

Exemple

L’exemple suivant montre un élément EntityType avec deux propriétés :

 <EntityType Name="Customers">
   <Documentation>
     <Summary>Summary here.</Summary>
     <LongDescription>Long description here.</LongDescription>
   </Documentation>
   <Key>
     <PropertyRef Name="CustomerId" />
   </Key>
   <Property Name="CustomerId" Type="int" Nullable="false" />
   <Property Name="Name" Type="nvarchar(max)" Nullable="false" />
 </EntityType>

Function, élément (SSDL)

L’élément Function dans le langage SSDL (Store Schema Definition Language) spécifie une procédure stockée qui existe dans la base de données sous-jacente.

L’élément Function peut avoir les éléments enfants suivants (dans l’ordre répertorié) :

  • Documentation (zéro ou un élément) ;
  • Paramètre (zéro ou plus)
  • CommandText (zéro ou un)
  • ReturnType (zéro ou plus)
  • éléments d'annotation (zéro, un ou plusieurs).

Un type de retour pour une fonction doit être spécifié avec l’élément ReturnType ou l’attribut ReturnType (voir ci-dessous), mais pas les deux.

Les procédures stockées spécifiées dans le modèle de stockage peuvent être importées dans le modèle conceptuel d'une application. Pour plus d’informations, consultez Interroger avec des procédures stockées. L’élément Function peut également être utilisé pour définir des fonctions personnalisées dans le modèle de stockage.  

Attributs applicables

Le tableau suivant décrit les attributs qui peuvent être appliqués à l’élément Function .

Notes

Certains attributs (non répertoriés ici) peuvent être qualifiés avec l’alias de magasin . Ces attributs sont utilisés par l'Assistant Mise à jour du modèle lors de la mise à jour d'un modèle.

Nom de l'attribut Est obligatoire Valeur
Nom Oui Nom de la procédure stockée.
ReturnType Non Type de retour de la procédure stockée.
Agrégat Non True si la procédure stockée retourne une valeur d’agrégation ; sinon False.
Builtin Non True si la fonction est une fonctionintégrée 1 ; sinon False.
StoreFunctionName Non Nom de la procédure stockée.
NiladicFunction Non True si la fonction est une fonctionniladic 2 ; False dans le cas contraire.
IsComposable Non True si la fonction est une fonction composable3 ; False dans le cas contraire.
ParameterTypeSemantics Non Énumération qui définit la sémantique de type utilisée pour résoudre les surcharges de fonction. L'énumération est définie dans le manifeste du fournisseur par définition de fonction. La valeur par défaut est AllowImplicitConversion.
Schéma Non Nom du schéma dans lequel une procédure stockée est définie.

1 Une fonction intégrée est une fonction définie dans la base de données. Pour plus d’informations sur les fonctions définies dans le modèle de stockage, consultez CommandText, élément (SSDL).

2 Une fonction niladicale est une fonction qui n’accepte aucun paramètre et, lorsqu’elle est appelée, ne nécessite pas de parenthèses.

3 Deux fonctions sont composables si la sortie d’une fonction peut être l’entrée de l’autre fonction.

Notes

Un nombre quelconque d’attributs d’annotation (attributs XML personnalisés) peut être appliqué à l’élément Function . Toutefois, les attributs personnalisés ne peuvent pas appartenir à un espace de noms XML réservé pour le langage SSDL. Les noms qualifiés complets de deux attributs personnalisés quelconques ne peuvent pas être identiques.

Exemple

L’exemple suivant montre un élément Function qui correspond à la procédure stockée UpdateOrderQuantity . La procédure stockée accepte deux paramètres et ne retourne pas de valeur.

 <Function Name="UpdateOrderQuantity"
           Aggregate="false"
           BuiltIn="false"
           NiladicFunction="false"
           IsComposable="false"
           ParameterTypeSemantics="AllowImplicitConversion"
           Schema="dbo">
   <Parameter Name="orderId" Type="int" Mode="In" />
   <Parameter Name="newQuantity" Type="int" Mode="In" />
 </Function>

Key, élément (SSDL)

L’élément Key dans le langage SSDL (Store Schema Definition Language) représente la clé primaire d’une table dans la base de données sous-jacente. Key est un élément enfant d’un élément EntityType, qui représente une ligne dans une table. La clé primaire est définie dans l’élément Key en référençant un ou plusieurs éléments Property définis sur l’élément EntityType .

L’élément Key peut avoir les éléments enfants suivants (dans l’ordre indiqué) :

  • PropertyRef (un ou plusieurs) ;
  • éléments d'annotation.

Aucun attribut n’est applicable à l’élément Key .

Exemple

L’exemple suivant montre un élément EntityType avec une clé qui référence une propriété :

 <EntityType Name="Customers">
   <Documentation>
     <Summary>Summary here.</Summary>
     <LongDescription>Long description here.</LongDescription>
   </Documentation>
   <Key>
     <PropertyRef Name="CustomerId" />
   </Key>
   <Property Name="CustomerId" Type="int" Nullable="false" />
   <Property Name="Name" Type="nvarchar(max)" Nullable="false" />
 </EntityType>

OnDelete, élément (SSDL)

L’élément OnDelete dans le langage SSDL (Store Schema Definition Language) reflète le comportement de la base de données lorsqu’une ligne qui participe à une contrainte de clé étrangère est supprimée. Si l’action est définie sur Cascade, les lignes qui font référence à une ligne en cours de suppression seront également supprimées. Si l’action est définie sur None, les lignes qui font référence à une ligne en cours de suppression ne sont pas également supprimées. Un élément OnDelete est un élément enfant d’un élément End.

Un élément OnDelete peut avoir les éléments enfants suivants (dans l’ordre indiqué) :

  • Documentation (zéro ou un élément) ;
  • éléments d'annotation (zéro, un ou plusieurs).

Attributs applicables

Le tableau suivant décrit les attributs qui peuvent être appliqués à l’élément OnDelete .

Nom de l'attribut Est obligatoire Valeur
Action Oui Cascade ou Aucun. (La valeur Restricted est valide mais a le même comportement que None.)

Notes

Un nombre quelconque d’attributs d’annotation (attributs XML personnalisés) peut être appliqué à l’élément OnDelete . Toutefois, les attributs personnalisés ne peuvent pas appartenir à un espace de noms XML réservé pour le langage SSDL. Les noms qualifiés complets de deux attributs personnalisés quelconques ne peuvent pas être identiques.

Exemple

L’exemple suivant montre un élément Association qui définit la contrainte de clé étrangère FK_CustomerOrders. L’élément OnDelete indique que toutes les lignes de la table Orders qui référencent une ligne particulière dans la table Customers seront supprimées si la ligne de la table Customers est supprimée.

 <Association Name="FK_CustomerOrders">
   <End Role="Customers"
        Type="ExampleModel.Store.Customers" Multiplicity="1">
     <OnDelete Action="Cascade" />
   </End>
   <End Role="Orders"
        Type="ExampleModel.Store.Orders" Multiplicity="*" />
   <ReferentialConstraint>
     <Principal Role="Customers">
       <PropertyRef Name="CustomerId" />
     </Principal>
     <Dependent Role="Orders">
       <PropertyRef Name="CustomerId" />
     </Dependent>
   </ReferentialConstraint>
 </Association>

Élément Parameter (SSDL)

L’élément Parameter dans le langage SSDL (Store Schema Definition Language) est un enfant de l’élément Function qui spécifie les paramètres d’une procédure stockée dans la base de données.

L’élément Parameter peut avoir les éléments enfants suivants (dans l’ordre indiqué) :

  • Documentation (zéro ou un élément) ;
  • éléments d'annotation (zéro, un ou plusieurs).

Attributs applicables

Le tableau ci-dessous décrit les attributs qui peuvent être appliqués à l’élément Parameter .

Nom de l'attribut Est obligatoire Valeur
Nom Oui Le nom du paramètre.
Type Oui Le type du paramètre.
Mode Non In, Out ou InOut selon que le paramètre est un paramètre d’entrée, de sortie ou d’entrée/sortie.
MaxLength Non Longueur maximale du paramètre.
Précision Non La précision du paramètre.
Mettre à l'échelle Non L’échelle du paramètre.
SRID Non Identificateur de référence du système spatial. Valide uniquement pour les paramètres des types spatiaux. Pour plus d’informations, consultez SRID et SRID (SQL Server).

Notes

Un nombre quelconque d’attributs d’annotation (attributs XML personnalisés) peut être appliqué à l’élément Parameter . Toutefois, les attributs personnalisés ne peuvent pas appartenir à un espace de noms XML réservé pour le langage SSDL. Les noms qualifiés complets de deux attributs personnalisés quelconques ne peuvent pas être identiques.

Exemple

L’exemple suivant montre un élément Function qui a deux éléments Parameter qui spécifient des paramètres d’entrée :

 <Function Name="UpdateOrderQuantity"
           Aggregate="false"
           BuiltIn="false"
           NiladicFunction="false"
           IsComposable="false"
           ParameterTypeSemantics="AllowImplicitConversion"
           Schema="dbo">
   <Parameter Name="orderId" Type="int" Mode="In" />
   <Parameter Name="newQuantity" Type="int" Mode="In" />
 </Function>

Élément Principal (SSDL)

L’élément Principal dans le langage SSDL (Store Schema Definition Language) est un élément enfant de l’élément ReferentialConstraint qui définit la fin du principal d’une contrainte de clé étrangère (également appelée contrainte référentielle). L’élément Principal spécifie la colonne de clé primaire (ou colonnes) dans une table référencée par une autre colonne (ou colonnes). Les éléments PropertyRef spécifient les colonnes référencées. L’élément Dependent spécifie les colonnes qui font référence aux colonnes clés primaires spécifiées dans l’élément Principal .

L’élément Principal peut avoir les éléments enfants suivants (dans l’ordre indiqué) :

  • PropertyRef (un ou plusieurs) ;
  • éléments d'annotation (zéro, un ou plusieurs).

Attributs applicables

Le tableau suivant décrit les attributs qui peuvent être appliqués à l’élément Principal .

Nom de l'attribut Est obligatoire Valeur
Rôle Oui Même valeur que l’attribut Role (s’il est utilisé) de l’élément End correspondant ; sinon, nom de la table qui contient la colonne référencée.

Notes

Un nombre quelconque d’attributs d’annotation (attributs XML personnalisés) peut être appliqué à l’élément Principal . Toutefois, les attributs personnalisés ne peuvent pas appartenir à un espace de noms XML réservé pour le langage CSDL. Les noms qualifiés complets de deux attributs personnalisés quelconques ne peuvent pas être identiques.

Exemple

L’exemple suivant montre un élément Association qui utilise un élément ReferentialConstraint pour spécifier les colonnes qui participent à la contrainte de clé étrangère FK_CustomerOrders. L’élément Principal spécifie la colonne CustomerId de la table Customer comme fin principale de la contrainte.

 <Association Name="FK_CustomerOrders">
   <End Role="Customers"
        Type="ExampleModel.Store.Customers" Multiplicity="1">
     <OnDelete Action="Cascade" />
   </End>
   <End Role="Orders"
        Type="ExampleModel.Store.Orders" Multiplicity="*" />
   <ReferentialConstraint>
     <Principal Role="Customers">
       <PropertyRef Name="CustomerId" />
     </Principal>
     <Dependent Role="Orders">
       <PropertyRef Name="CustomerId" />
     </Dependent>
   </ReferentialConstraint>
 </Association>

Property, élément (SSDL)

L’élément Property dans le langage SSDL (Store Schema Definition Language) représente une colonne dans une table de la base de données sous-jacente. Les éléments de propriété sont des enfants d’éléments EntityType, qui représentent des lignes dans une table. Chaque élément Property défini sur un élément EntityType représente une colonne.

Un élément Property ne peut pas avoir d’éléments enfants.

Attributs applicables

Le tableau suivant décrit les attributs qui peuvent être appliqués à l’élément Property .

Nom de l'attribut Est obligatoire Valeur
Nom Oui Nom de la colonne correspondante.
Type Oui Type de la colonne correspondante.
Nullable Non True (valeur par défaut) ou False selon que la colonne correspondante peut avoir une valeur Null.
DefaultValue Non Valeur par défaut de la colonne correspondante.
MaxLength Non Longueur maximale de la colonne correspondante.
FixedLength Non True ou False selon que la valeur de colonne correspondante sera stockée sous la forme d’une chaîne de longueur fixe.
Précision Non Précision de la colonne correspondante.
Mettre à l'échelle Non Échelle de la colonne correspondante.
Unicode Non True ou False selon que la valeur de colonne correspondante sera stockée en tant que chaîne Unicode.
Classement Non Chaîne qui spécifie l’ordre de tri à utiliser dans la source de données.
SRID Non Identificateur de référence du système spatial. Valide uniquement pour les propriétés des types spatiaux. Pour plus d’informations, consultez SRID et SRID (SQL Server).
StoreGeneratedPattern Non Aucun, Identité (si la valeur de colonne correspondante est une identité générée dans la base de données) ou calculée (si la valeur de colonne correspondante est calculée dans la base de données). Non valide pour les propriétés RowType.

Notes

Un nombre quelconque d’attributs d’annotation (attributs XML personnalisés) peut être appliqué à l’élément Property . Toutefois, les attributs personnalisés ne peuvent pas appartenir à un espace de noms XML réservé pour le langage SSDL. Les noms qualifiés complets de deux attributs personnalisés quelconques ne peuvent pas être identiques.

Exemple

L’exemple suivant montre un élément EntityType avec deux éléments Property enfants :

 <EntityType Name="Customers">
   <Documentation>
     <Summary>Summary here.</Summary>
     <LongDescription>Long description here.</LongDescription>
   </Documentation>
   <Key>
     <PropertyRef Name="CustomerId" />
   </Key>
   <Property Name="CustomerId" Type="int" Nullable="false" />
   <Property Name="Name" Type="nvarchar(max)" Nullable="false" />
 </EntityType>

Élément PropertyRef (SSDL)

L’élément PropertyRef dans le langage SSDL (Store Schema Definition Language) fait référence à une propriété définie sur un élément EntityType pour indiquer que la propriété exécutera l’un des rôles suivants :

  • Faire partie de la clé primaire de la table que représente EntityType . Un ou plusieurs éléments PropertyRef peuvent être utilisés pour définir une clé primaire. Pour plus d'informations, consultez Élément Key.
  • Faire partie de la terminaison dépendante ou principale d'une contrainte référentielle. Pour plus d'informations, consultez Élément ReferentialConstraint.

L’élément PropertyRef ne peut avoir que les éléments enfants suivants :

  • Documentation (zéro ou un élément) ;
  • éléments d'annotation.

Attributs applicables

Le tableau ci-dessous décrit les attributs qui peuvent être appliqués à l’élément PropertyRef .

Nom de l'attribut Est obligatoire Valeur
Nom Oui Nom de la propriété référencée.

Notes

Un nombre quelconque d’attributs d’annotation (attributs XML personnalisés) peut être appliqué à l’élément PropertyRef . Toutefois, les attributs personnalisés ne peuvent pas appartenir à un espace de noms XML réservé pour le langage CSDL. Les noms qualifiés complets de deux attributs personnalisés quelconques ne peuvent pas être identiques.

Exemple

L’exemple suivant montre un élément PropertyRef utilisé pour définir une clé primaire en référençant une propriété définie sur un élément EntityType .

 <EntityType Name="Customers">
   <Documentation>
     <Summary>Summary here.</Summary>
     <LongDescription>Long description here.</LongDescription>
   </Documentation>
   <Key>
     <PropertyRef Name="CustomerId" />
   </Key>
   <Property Name="CustomerId" Type="int" Nullable="false" />
   <Property Name="Name" Type="nvarchar(max)" Nullable="false" />
 </EntityType>

ReferentialConstraint, élément (SSDL)

L’élément ReferentialConstraint dans le langage SSDL (Store Schema Definition Language) représente une contrainte de clé étrangère (également appelée contrainte d’intégrité référentielle) dans la base de données sous-jacente. Les terminaisons principale et dépendante de la contrainte sont spécifiées respectivement par les éléments enfants Principal et Dependent. Les colonnes qui participent aux terminaisons principale et dépendante sont référencées avec les éléments PropertyRef.

L’élément ReferentialConstraint est un élément enfant facultatif de l’élément Association. Si un élément ReferentialConstraint n’est pas utilisé pour mapper la contrainte de clé étrangère spécifiée dans l’élément Association , un élément AssociationSetMapping doit être utilisé pour effectuer cette opération.

L’élément ReferentialConstraint peut avoir les éléments enfants suivants :

  • Documentation (zéro ou un élément) ;
  • Principal (exactement un élément) ;
  • Dependent (exactement un élément) ;
  • éléments d'annotation (zéro, un ou plusieurs).

Attributs applicables

Un nombre quelconque d’attributs d’annotation (attributs XML personnalisés) peut être appliqué à l’élément ReferentialConstraint . Toutefois, les attributs personnalisés ne peuvent pas appartenir à un espace de noms XML réservé pour le langage SSDL. Les noms qualifiés complets de deux attributs personnalisés quelconques ne peuvent pas être identiques.

Exemple

L’exemple suivant montre un élément Association qui utilise un élément ReferentialConstraint pour spécifier les colonnes qui participent à la contrainte de clé étrangère FK_CustomerOrders :

 <Association Name="FK_CustomerOrders">
   <End Role="Customers"
        Type="ExampleModel.Store.Customers" Multiplicity="1">
     <OnDelete Action="Cascade" />
   </End>
   <End Role="Orders"
        Type="ExampleModel.Store.Orders" Multiplicity="*" />
   <ReferentialConstraint>
     <Principal Role="Customers">
       <PropertyRef Name="CustomerId" />
     </Principal>
     <Dependent Role="Orders">
       <PropertyRef Name="CustomerId" />
     </Dependent>
   </ReferentialConstraint>
 </Association>

ReturnType, élément (SSDL)

L’élément ReturnType dans le langage SSDL (Store Schema Definition Language) spécifie le type de retour d’une fonction définie dans un élément Function . Un type de retour de fonction peut également être spécifié avec un attribut ReturnType .

Le type de retour d’une fonction est spécifié avec l’attribut Type ou l’élément ReturnType .

L’élément ReturnType peut avoir les éléments enfants suivants :

  • CollectionType (un)

Notes

Un nombre quelconque d’attributs d’annotation (attributs XML personnalisés) peut être appliqué à l’élément ReturnType . Toutefois, les attributs personnalisés ne peuvent pas appartenir à un espace de noms XML réservé pour le langage SSDL. Les noms qualifiés complets de deux attributs personnalisés quelconques ne peuvent pas être identiques.

Exemple

L’exemple suivant utilise une fonction qui retourne une collection de lignes.

   <Function Name="GetProducts" IsComposable="true" Schema="dbo">
     <ReturnType>
       <CollectionType>
         <RowType>
           <Property Name="ProductID" Type="int" Nullable="false" />
           <Property Name="CategoryID" Type="bigint" Nullable="false" />
           <Property Name="ProductName" Type="nvarchar" MaxLength="40" Nullable="false" />
           <Property Name="UnitPrice" Type="money" />
           <Property Name="Discontinued" Type="bit" />
         </RowType>
       </CollectionType>
     </ReturnType>
   </Function>

RowType, élément (SSDL)

Un élément RowType dans le langage SSDL (Store Schema Definition Language) définit une structure non nommée comme type de retour pour une fonction définie dans le magasin.

Un élément RowType est l’élément enfant de l’élément CollectionType :

Un élément RowType peut avoir les éléments enfants suivants :

  • Property (un ou plusieurs) ;

Exemple

L’exemple suivant montre une fonction de magasin qui utilise un élément CollectionType pour spécifier que la fonction retourne une collection de lignes (comme spécifié dans l’élément RowType ).

   <Function Name="GetProducts" IsComposable="true" Schema="dbo">
     <ReturnType>
       <CollectionType>
         <RowType>
           <Property Name="ProductID" Type="int" Nullable="false" />
           <Property Name="CategoryID" Type="bigint" Nullable="false" />
           <Property Name="ProductName" Type="nvarchar" MaxLength="40" Nullable="false" />
           <Property Name="UnitPrice" Type="money" />
           <Property Name="Discontinued" Type="bit" />
         </RowType>
       </CollectionType>
     </ReturnType>
   </Function>

Schema, élément (SSDL)

L’élément Schema dans le langage SSDL ( Store Schema Definition Language) est l’élément racine d’une définition de modèle de stockage. Il contient des définitions pour les objets, les fonctions et les conteneurs qui composent un modèle de stockage.

L’élément Schema peut contenir zéro ou plusieurs éléments enfants suivants :

  • Association
  • EntityType
  • EntityContainer
  • Fonction

L’élément Schema utilise l’attribut Espace de noms pour définir l’espace de noms pour le type d’entité et les objets d’association dans un modèle de stockage. Dans un espace de noms, deux objets ne peuvent pas avoir le même nom.

Un espace de noms de modèle de stockage est différent de l’espace de noms XML de l’élément Schema . Un espace de noms de modèle de stockage (tel que défini par l’attribut Espace de noms ) est un conteneur logique pour les types d’entités et les types d’association. L’espace de noms XML (indiqué par l’attribut xmlns ) d’un élément Schema est l’espace de noms par défaut pour les éléments enfants et les attributs de l’élément Schema . Les espaces de noms XML du formulaire https://schemas.microsoft.com/ado/YYYY/MM/edm/ssdl (où AAAA et MM représentent respectivement une année et un mois) sont réservés à SSDL. Des éléments et attributs personnalisés ne peuvent pas être dans des espaces de noms de cette forme.

Attributs applicables

Le tableau ci-dessous décrit les attributs qui peuvent être appliqués à l’élément Schema .

Nom de l'attribut Est obligatoire Valeur
Espace de noms Oui Espace de noms du modèle de stockage. La valeur de l’attribut Espace de noms est utilisée pour former le nom complet d’un type. Par exemple, si un EntityType nommé Customer se trouve dans l’espace de noms ExampleModel.Store, le nom complet de EntityType est ExampleModel.Store.Customer.
Les chaînes suivantes ne peuvent pas être utilisées comme valeur pour l’attribut Espace de noms : System, Temporaire ou Edm. La valeur de l’attribut Espace de noms ne peut pas être identique à celle de l’attribut Espace de noms dans l’élément CSDL Schema.
Alias Non Identificateur utilisé à la place du nom de l'espace de noms. Par exemple, si un EntityType nommé Customer se trouve dans l’espace de noms ExampleModel.Store et que la valeur de l’attribut Alias est StorageModel.Customer, vous pouvez utiliser StorageModel.Customer comme nom complet de EntityType.
Fournisseur Oui Fournisseur de données.
ProviderManifestToken Oui Jeton qui indique au fournisseur quel manifeste de fournisseur retourner. Aucun format n'est défini pour le jeton. Les valeurs du jeton sont définies par le fournisseur. Pour plus d’informations sur les jetons de manifeste de fournisseur SQL Server, consultez SqlClient pour Entity Framework.

Exemple

L’exemple suivant montre un élément Schema qui contient un élément EntityContainer , deux éléments EntityType et un élément Association .

 <Schema Namespace="ExampleModel.Store"
       Alias="Self" Provider="System.Data.SqlClient"
       ProviderManifestToken="2008"
       xmlns="https://schemas.microsoft.com/ado/2009/11/edm/ssdl">
   <EntityContainer Name="ExampleModelStoreContainer">
     <EntitySet Name="Customers"
                EntityType="ExampleModel.Store.Customers"
                Schema="dbo" />
     <EntitySet Name="Orders"
                EntityType="ExampleModel.Store.Orders"
                Schema="dbo" />
     <AssociationSet Name="FK_CustomerOrders"
                     Association="ExampleModel.Store.FK_CustomerOrders">
       <End Role="Customers" EntitySet="Customers" />
       <End Role="Orders" EntitySet="Orders" />
     </AssociationSet>
   </EntityContainer>
   <EntityType Name="Customers">
     <Documentation>
       <Summary>Summary here.</Summary>
       <LongDescription>Long description here.</LongDescription>
     </Documentation>
     <Key>
       <PropertyRef Name="CustomerId" />
     </Key>
     <Property Name="CustomerId" Type="int" Nullable="false" />
     <Property Name="Name" Type="nvarchar(max)" Nullable="false" />
   </EntityType>
   <EntityType Name="Orders" xmlns:c="http://CustomNamespace">
     <Key>
       <PropertyRef Name="OrderId" />
     </Key>
     <Property Name="OrderId" Type="int" Nullable="false"
               c:CustomAttribute="someValue"/>
     <Property Name="ProductId" Type="int" Nullable="false" />
     <Property Name="Quantity" Type="int" Nullable="false" />
     <Property Name="CustomerId" Type="int" Nullable="false" />
     <c:CustomElement>
       Custom data here.
     </c:CustomElement>
   </EntityType>
   <Association Name="FK_CustomerOrders">
     <End Role="Customers"
          Type="ExampleModel.Store.Customers" Multiplicity="1">
       <OnDelete Action="Cascade" />
     </End>
     <End Role="Orders"
          Type="ExampleModel.Store.Orders" Multiplicity="*" />
     <ReferentialConstraint>
       <Principal Role="Customers">
         <PropertyRef Name="CustomerId" />
       </Principal>
       <Dependent Role="Orders">
         <PropertyRef Name="CustomerId" />
       </Dependent>
     </ReferentialConstraint>
   </Association>
   <Function Name="UpdateOrderQuantity"
             Aggregate="false"
             BuiltIn="false"
             NiladicFunction="false"
             IsComposable="false"
             ParameterTypeSemantics="AllowImplicitConversion"
             Schema="dbo">
     <Parameter Name="orderId" Type="int" Mode="In" />
     <Parameter Name="newQuantity" Type="int" Mode="In" />
   </Function>
   <Function Name="UpdateProductInOrder" IsComposable="false">
     <CommandText>
       UPDATE Orders
       SET ProductId = @productId
       WHERE OrderId = @orderId;
     </CommandText>
     <Parameter Name="productId"
                Mode="In"
                Type="int"/>
     <Parameter Name="orderId"
                Mode="In"
                Type="int"/>
   </Function>
 </Schema>

Attributs d'annotation

Les attributs d'annotation en SSDL (Store Schema Definition Language) sont des attributs XML personnalisés dans le modèle de stockage qui fournissent des métadonnées supplémentaires concernant les éléments dans le modèle de stockage. En plus d'avoir une structure XML valide, les contraintes suivantes s'appliquent aux attributs d'annotation :

  • Les attributs d'annotation ne doivent pas figurer dans un espace de noms XML réservé pour le langage SSDL.
  • Les noms qualifiés complets de deux attributs d'annotation ne doivent pas être identiques.

Plusieurs attributs d'annotation peuvent être appliqués à un élément SSDL donné. Les métadonnées contenues dans les éléments d’annotation sont accessibles au moment de l’exécution à l’aide de classes dans l’espace de noms System.Data.Metadata.Edm.

Exemple

L’exemple suivant montre un élément EntityType qui a un attribut d’annotation appliqué à la propriété OrderId . L’exemple montre également un élément d’annotation ajouté à l’élément EntityType .

 <EntityType Name="Orders" xmlns:c="http://CustomNamespace">
   <Key>
     <PropertyRef Name="OrderId" />
   </Key>
   <Property Name="OrderId" Type="int" Nullable="false"
             c:CustomAttribute="someValue"/>
   <Property Name="ProductId" Type="int" Nullable="false" />
   <Property Name="Quantity" Type="int" Nullable="false" />
   <Property Name="CustomerId" Type="int" Nullable="false" />
   <c:CustomElement>
     Custom data here.
   </c:CustomElement>
 </EntityType>

Éléments d'annotation (SSDL)

Les éléments d'annotation en SSDL (Store Schema Definition Language) sont des éléments XML personnalisés dans le modèle de stockage qui fournissent des métadonnées supplémentaires concernant le modèle de stockage. En plus d'avoir une structure XML valide, les contraintes suivantes s'appliquent aux éléments d'annotation :

  • Les éléments d'annotation ne doivent pas figurer dans un espace de noms XML réservé au langage SSDL.
  • Les noms qualifiés complets de deux éléments d'annotation ne doivent pas être identiques.
  • Les éléments d'annotation doivent apparaître après tous les autres éléments enfants d'un élément SSDL donné.

Plusieurs éléments d'annotation peuvent être des enfants d'un élément SSDL donné. À compter de la version 4 du .NET Framework, les métadonnées contenues dans les éléments d’annotation sont accessibles au moment de l’exécution à l’aide de classes dans l’espace de noms System.Data.Metadata.Edm.

Exemple

L’exemple suivant montre un élément EntityType qui a un élément d’annotation (CustomElement). L’exemple montre également un attribut d’annotation appliqué à la propriété OrderId .

 <EntityType Name="Orders" xmlns:c="http://CustomNamespace">
   <Key>
     <PropertyRef Name="OrderId" />
   </Key>
   <Property Name="OrderId" Type="int" Nullable="false"
             c:CustomAttribute="someValue"/>
   <Property Name="ProductId" Type="int" Nullable="false" />
   <Property Name="Quantity" Type="int" Nullable="false" />
   <Property Name="CustomerId" Type="int" Nullable="false" />
   <c:CustomElement>
     Custom data here.
   </c:CustomElement>
 </EntityType>

Facettes (SSDL)

Les facettes en SSDL (Store Schema Definition Language) représentent des contraintes sur les types de colonne spécifiés dans les éléments Property. Les facettes sont implémentées en tant qu’attributs XML sur les éléments Property .

Le tableau ci-dessous décrit les facettes prises en charge dans le langage SSDL :

Facette Description
Classement Spécifie la table de classement ou ordre de tri à utiliser lors de l'exécution d'opérations de comparaison et de tri sur des valeurs de la propriété.
FixedLength Spécifie si la longueur de la valeur de colonne peut varier.
MaxLength Spécifie la longueur maximale de la valeur de colonne.
Précision Pour les propriétés de type Decimal, spécifie le nombre de chiffres qu’une valeur de propriété peut avoir. Pour les propriétés de type Time, DateTime et DateTimeOffset, spécifie le nombre de chiffres pour la partie fractionnaire de secondes de la valeur de colonne.
Mettre à l'échelle Spécifie le nombre de chiffres à droite de la virgule décimale pour la valeur de colonne.
Unicode Indique si la valeur de colonne est stockée au format Unicode.