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 System.Data.Metadata.Edm.StoreItemCollection et sont 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 sur le modèle conceptuel pour stocker des commandes spécifiques.

Entity Framework Designer (EF Designer) stocke les informations du modèle de stockage dans un fichier .edmx au moment du design. 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 à la fin de l’association et la multiplicité à chaque extrémité. Un élément ReferentialConstraint facultatif spécifie le principal et les extrémités 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)
  • Fin (exactement deux)
  • ReferentialConstraint (zéro ou un)
  • Éléments d’annotation (zéro ou plus)

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.

Remarque

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 jeux d’associations SSDL sont mappés aux jeux d’associations CSDL par un élément AssociationSetMapping. Toutefois, si l’association CSDL pour un jeu d’associations 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 sont substitué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)
  • Fin (zéro ou deux)
  • Éléments d’annotation (zéro ou plus)

Attributs applicables

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

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.

Remarque

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 contrainte de FK_CustomerOrders 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 qu’un type de retour de 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 :

Remarque

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 SSDL (Store Schema Definition Language) 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 DefiningQuery 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. La vue définie dans un élément DefiningQuery peut être mappée à un type d’entité dans le modèle conceptuel via un élément EntitySetMapping. La vue définie dans un élément DefiningQuery 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 le traitement des modifications 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 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 de 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 Dépendant spécifie la colonne (ou les colonnes) dans une table qui référence une colonne clé primaire (ou des colonnes). PropertyRef éléments spécifient les colonnes référencées. L’élément Principal spécifie les colonnes clés primaires référencées par les colonnes spécifiées dans l’élément Dependent.

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

  • PropertyRef (un ou plusieurs)
  • Éléments d’annotation (zéro ou plus)

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 La même valeur que l’attribut Role (si utilisé) de l’élément End correspondant ; sinon, nom de la table qui contient la colonne de référencement.

Remarque

Un nombre quelconque d'attributs d'annotation (attributs XML personnalisés) peut être appliqué à l'élément Dependent. 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)

La documentation élément dans le langage SSDL (Store Schema Definition Language) peut être utilisé pour fournir des informations sur un objet défini dans un élément parent.

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

  • 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 ci-dessous illustre l'élément Documentation comme é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 répertorié) :

  • Documentation (zéro ou un élément)
  • OnDelete (zéro ou un élément)
  • Éléments d’annotation (zéro 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 de l’ensemble d’entités SSDL situé à la fin 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..1ou * en fonction du 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 qu’il existe zéro ou une ligne à la fin de la contrainte de clé étrangère.
* indique que zéro, un ou plusieurs lignes existent à la fin de la contrainte de clé étrangère.

Remarque

Un nombre quelconque d'attributs d'annotation (attributs XML personnalisés) peut être appliqué à l'élément Fin. 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 Multiplicity spécifiées sur chaque élément End indiquent que de nombreuses lignes de la table Orders peuvent être associées à une ligne dans la table Customers, mais qu’une seule ligne de la table Customers peut être associée à une ligne dans le Commandes table. 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 Fin (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 Fin peut avoir les éléments enfants suivants (dans l'ordre répertorié) :

  • Documentation (zéro ou un)
  • Éléments d’annotation (zéro ou plus)

Attributs applicables

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

Nom de l’attribut Est obligatoire Valeur
EntitySet Oui Nom de l’ensemble d’entités SSDL situé à la fin de la contrainte de clé étrangère.
Rôle Non Valeur de l’un des attributs Role spécifiés sur un élément Fin de l’élément Association correspondant.

Remarque

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 les tables d’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 les jeux d’association (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 de documentation. Si une documentation est présente, elle 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 (.).

Remarque

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 dans 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.

Remarque

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.

Remarque

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 dans SSDL représente la table ou la vue dans laquelle des lignes se produisent. 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)
  • Clé (zéro ou un élément)
  • éléments d'annotation.

Attributs applicables

Le tableau ci-dessous décrit les attributs qui peuvent s'appliquer à 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 (.).

Remarque

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)
  • Paramètre (zéro ou plus)
  • CommandText (zéro ou un)
  • ReturnType (zéro ou plus)
  • Éléments d’annotation (zéro ou plus)

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 interrogation 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.

Remarque

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.
Regroupement Non True si la procédure stockée retourne une valeur d’agrégation ; sinon, false.
BuiltIn Non True si la fonction est une fonction intégrée1 ; sinon, false.
StoreFunctionName Non Nom de la procédure stockée.
NiladicFunction Non True si la fonction est une fonction niladic2 ; False sinon.
IsComposable Non True si la fonction est une fonction composée3 ; False sinon.
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 fonction niladic 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.

Remarque

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 fait 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 sont é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 répertorié) :

  • Documentation (zéro ou un)
  • Éléments d’annotation (zéro ou plus)

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 restreinte est valide, mais a le même comportement que Aucun.)

Remarque

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 sont 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 répertorié) :

  • Documentation (zéro ou un)
  • Éléments d’annotation (zéro ou plus)

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 Nom du paramètre.
Type Oui Le type du paramètre.
Mode Non Dans, Outou 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.
Mise à 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).

Remarque

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 les colonnes) dans une table référencée par une autre colonne (ou colonnes). PropertyRef éléments spécifient les colonnes référencées. L’élément Dependent spécifie des colonnes qui référencent les 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 ou plus)

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 La même valeur que l’attribut Role (si utilisé) de l’élément End correspondant ; sinon, nom de la table qui contient la colonne référencée.

Remarque

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. Property éléments sont des enfants d’éléments EntityType, qui représentent des lignes d’une table. Chaque élément Property défini sur un élémentEntityType 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 forme de chaîne de longueur fixe.
Précision Non Précision de la colonne correspondante.
Mise à l’échelle Non Échelle de la colonne correspondante.
Unicode Non True ou False selon que la valeur de colonne correspondante sera stockée sous forme de 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, Identity (si la valeur de colonne correspondante est une identité générée dans la base de données) ou Computed (si la valeur de colonne correspondante est calculée dans la base de données). Non valide pour les propriétés RowType.

Remarque

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 de définition de schéma (SSDL) fait référence à une propriété définie sur un élément EntityType pour indiquer que la propriété effectuera l’un des rôles suivants :

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

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

  • Documentation (zéro ou un)
  • é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.

Remarque

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 extrémités principale et dépendante de la contrainte sont spécifiées par les éléments enfants principal et dépendant, respectivement. Les colonnes qui participent au principal et aux extrémités dépendantes sont référencées avec des é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)
  • Principal (exactement un)
  • Dépendant (exactement un)
  • Éléments d’annotation (zéro ou plus)

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)

Remarque

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 Function 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 sans nom comme type de retour pour une fonction définie dans le magasin.

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

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

  • Propriété (une 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 des éléments enfants suivants :

  • Association
  • EntityType
  • EntityContainer
  • Fonction

L’élément Schema utilise l’attribut Namespace 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 Namespace) est un conteneur logique pour les types d’entités et les types d’association. L’espace de noms XML (indiqué par le xmlns attribut) 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 Namespace 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 l' EntityType est ExampleModel.Store.Customer.
Les chaînes suivantes ne peuvent pas être utilisées comme valeur pour l’attribut Namespace : System, Transient ou Edm. La valeur de l’attribut Namespace ne peut pas être identique à la valeur de l’attribut Namespace dans l’élément CSDL Schema.
Alias Non Identificateur utilisé à la place du nom de l'espace de noms. Par exemple, si une EntityType nommée Customer se trouve dans l’espace de noms ExampleModel.Store et que la valeur de l’attribut Alias est StorageModel, vous pouvez utiliser StorageModel.Customer comme nom complet de l’entité 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 du 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 .NET Framework version 4, 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 avec 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 du langage SSDL (Store Schema Definition Language) représentent des contraintes sur les types de colonnes spécifiés dans les éléments Property. Les facettes sont implémentées en tant qu’attributs XML sur é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, DateTimeet DateTimeOffset, spécifie le nombre de chiffres pour la partie fractionnaire de secondes de la valeur de colonne.
Mise à 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.