Spécification CSDL

Remarque

CSDL v1 n'est pas pris en charge, veuillez mettre à jour vers V3

Le langage CSDL (Conceptual Schema Definition Language) est un langage basé sur XML qui décrit les entités, relations et fonctions qui composent un modèle conceptuel d'une application pilotée par les données. Ce modèle conceptuel peut être utilisé par Entity Framework ou WCF Data Services. Les métadonnées décrites avec CSDL sont utilisées par Entity Framework pour mapper des entités et des relations définies dans un modèle conceptuel à une source de données. Pour plus d’informations, consultez spécification SSDL et spécification MSL.

CSDL est l’implémentation Entity Framework d’Entity Data Model.

Dans une application Entity Framework, les métadonnées de modèle conceptuel sont chargées à partir d’un fichier .csdl (écrit en CSDL) dans une instance de system.Data.Metadata.Edm.EdmItemCollection 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 conceptuel pour traduire des requêtes sur le modèle conceptuel en commandes spécifiques à la source de données.

EF Designer stocke les informations de modèle conceptuel dans un fichier .edmx au moment du design. Au moment de la génération, EF Designer utilise des informations dans un fichier .edmx pour créer le fichier .csdl nécessaire par Entity Framework au moment de l’exécution.

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

Version CSDL Espace de noms XML
CSDL v1 https://schemas.microsoft.com/ado/2006/04/edm
CSDL v2 https://schemas.microsoft.com/ado/2008/09/edm
CSDL v3 https://schemas.microsoft.com/ado/2009/11/edm

Association, élément (CSDL)

Un élément Association définit une relation entre deux types d’entités. Une association doit spécifier les types d'entités impliqués dans la relation et le nombre possible de types d'entités à chaque terminaison de la relation, appelé « multiplicité ». La multiplicité d’une fin d’association peut avoir une valeur d’un (1), zéro ou un (0,.1) ou plusieurs (*). Ces informations sont spécifiées dans deux éléments End enfants.

Il est possible d'accéder aux instances de type d'entité au niveau d'une terminaison d'une association via les propriétés de navigation ou les clés étrangères, si elles sont exposées sur un type d'entité.

Dans une application, une instance d'une association représente une association spécifique entre des instances de types d'entités. Les instances d’association sont regroupées logiquement dans un ensemble d’associations.

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

  • Documentation (zéro ou un élément)
  • Fin (exactement 2 éléments)
  • ReferentialConstraint (zéro ou un élément)
  • Éléments d’annotation (zéro ou plusieurs éléments)

Attributs applicables

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

Nom de l’attribut Est obligatoire Valeur
Nom Oui Nom de l'association.

 

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 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 l’association CustomerOrders lorsque les clés étrangères n’ont pas été exposées sur les types d’entités Customer et Order . Les valeurs Multiplicité pour chaque Fin de l’association indiquent que de nombreuses Commandes peuvent être associées à un Customer, mais qu’un seul Client peut être associé à une commande. En outre, l’élément OnDelete indique que tous les Orders liés à un Client particulier et qui ont été chargés dans ObjectContext seront supprimés si le Client est supprimé.

 <Association Name="CustomerOrders">
   <End Type="ExampleModel.Customer" Role="Customer" Multiplicity="1" >
         <OnDelete Action="Cascade" />
   </End>
   <End Type="ExampleModel.Order" Role="Order" Multiplicity="*" />
 </Association>

 

L’exemple suivant montre un élément Association qui définit l’association CustomerOrders lorsque les clés étrangères ont été exposées sur les types d’entités Client et Commande. Avec les clés étrangères exposées, la relation entre les entités est gérée avec un élément ReferentialConstraint . Un élément AssociationSetMapping correspondant n'est pas nécessaire pour mapper cette association à la source de données.

 <Association Name="CustomerOrders">
   <End Type="ExampleModel.Customer" Role="Customer" Multiplicity="1" >
         <OnDelete Action="Cascade" />
   </End>
   <End Type="ExampleModel.Order" Role="Order" Multiplicity="*" />
   <ReferentialConstraint>
        <Principal Role="Customer">
            <PropertyRef Name="Id" />
        </Principal>
        <Dependent Role="Order">
             <PropertyRef Name="CustomerId" />
         </Dependent>
   </ReferentialConstraint>
 </Association>

 

 

AssociationSet, élément (CSDL)

L'élément AssociationSet dans le langage CSDL (Conceptual Schema Definition Language) est un conteneur logique pour les instances d'association du même type. Un ensemble d'associations fournit une définition pour le regroupement d'instances d'association afin qu'elles puissent être mappées à une source de données.  

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

  • Documentation (zéro ou un élément autorisé)
  • Fin (exactement deux éléments requis)
  • Éléments d'annotation (zéro, un ou plusieurs éléments autorisés)

L'attribut Association spécifie le type d'association qu'un ensemble d'associations contient. Les jeux d'entités qui composent les terminaisons d'un ensemble d'associations sont spécifiés avec exactement deux éléments Fin enfants.

Attributs applicables

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

Nom de l’attribut Est obligatoire Valeur
Nom Oui Nom du jeu d'entités. La valeur de l’attribut Nom ne peut pas être identique à la valeur de l’attribut Association.
Association Oui Nom qualifié complet de l'association dont l'ensemble d'associations contient des instances. L'association doit être dans le même espace de noms que l'ensemble d'associations.

 

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 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 deux éléments AssociationSet :

 <EntityContainer Name="BooksContainer" >
   <EntitySet Name="Books" EntityType="BooksModel.Book" />
   <EntitySet Name="Publishers" EntityType="BooksModel.Publisher" />
   <EntitySet Name="Authors" EntityType="BooksModel.Author" />
   <AssociationSet Name="PublishedBy" Association="BooksModel.PublishedBy">
     <End Role="Book" EntitySet="Books" />
     <End Role="Publisher" EntitySet="Publishers" />
   </AssociationSet>
   <AssociationSet Name="WrittenBy" Association="BooksModel.WrittenBy">
     <End Role="Book" EntitySet="Books" />
     <End Role="Author" EntitySet="Authors" />
   </AssociationSet>
 </EntityContainer>

 

 

Élément CollectionType (CSDL)

L'élément CollectionType dans le langage CSDL (Conceptual Schema Definition Language) spécifie qu'un paramètre de fonction ou un type de retour de fonction est une collection. L’élément CollectionType peut être un enfant de l’élément Parameter ou de l’élément ReturnType (Function). Le type de collection peut être spécifié à l'aide de l'attribut Type ou de l'un des éléments enfants suivants :

  • CollectionType
  • ReferenceType
  • RowType
  • TypeRef

Remarque

Un modèle ne sera pas validé si le type d'une collection est spécifié avec à la fois l'attribut Type et un élément enfant.

 

Attributs applicables

Le tableau ci-dessous décrit les attributs qui peuvent s'appliquer à l'élément CollectionType. Notez que les attributsDefaultValue, MaxLength, FixedLength, Precision, Scale, Unicode, et Collation ne s’appliquent qu’aux collections de EDMSimpleTypes.

Nom de l’attribut Est obligatoire Valeur
Type Non Type de la collection.
Nullable Non True (valeur par défaut) ou False selon que la propriété peut avoir ou non une valeur null.
[!NOTE]
> Dans CSDL v1, une propriété de type complexe doit avoir Nullable="False".
DefaultValue Non Valeur par défaut de la propriété.
MaxLength Non Longueur maximale de la valeur de propriété.
FixedLength Non True ou False selon que la valeur de propriété sera stockée sous forme de chaîne de longueur fixe.
Précision Non Précision de la valeur de propriété.
Mise à l’échelle Non Échelle de la valeur de propriété.
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)
Unicode Non True ou False selon que la valeur de propriété 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.

 

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 CSDL. Les noms qualifiés complets de deux attributs personnalisés quelconques ne peuvent pas être identiques.

 

Exemple

L’exemple suivant montre une fonction définie par un modèle qui utilise un élément CollectionType pour spécifier que la fonction retourne une collection de types d’entités Person (comme spécifié avec l’attribut ElementType ).

 <Function Name="LastNamesAfter">
        <Parameter Name="someString" Type="Edm.String"/>
        <ReturnType>
             <CollectionType  ElementType="SchoolModel.Person"/>
        </ReturnType>
        <DefiningExpression>
             SELECT VALUE p
             FROM SchoolEntities.People AS p
             WHERE p.LastName >= someString
        </DefiningExpression>
 </Function>

 

L'exemple ci-dessous illustre une fonction définie par modèle qui utilise un élément CollectionType pour spécifier que la fonction retourne une collection de lignes (telles que spécifiées dans l'élément RowType).

 <Function Name="LastNamesAfter">
   <Parameter Name="someString" Type="Edm.String" />
   <ReturnType>
    <CollectionType>
      <RowType>
        <Property Name="FirstName" Type="Edm.String" Nullable="false" />
        <Property Name="LastName" Type="Edm.String" Nullable="false" />
      </RowType>
    </CollectionType>
   </ReturnType>
   <DefiningExpression>
             SELECT VALUE ROW(p.FirstName, p.LastName)
             FROM SchoolEntities.People AS p
             WHERE p.LastName &gt;= somestring
   </DefiningExpression>
 </Function>

 

L'exemple ci-dessous illustre une fonction définie par modèle qui utilise l'élément CollectionType pour spécifier que la fonction accepte comme paramètre une collection de types d'entités Department.

 <Function Name="GetAvgBudget">
      <Parameter Name="Departments">
          <CollectionType>
             <TypeRef Type="SchoolModel.Department"/>
          </CollectionType>
           </Parameter>
       <ReturnType Type="Collection(Edm.Decimal)"/>
       <DefiningExpression>
             SELECT VALUE AVG(d.Budget) FROM Departments AS d
       </DefiningExpression>
 </Function>

 

 

ComplexType, élément (CSDL)

Un élément ComplexType définit une structure de données composée de propriétés EdmSimpleType ou d'autres types complexes.  Un type complexe peut être une propriété d'un type d'entité ou d'un autre type complexe. Un type complexe est semblable à un type d'entité du fait qu'un type complexe définit des données. Toutefois, il existe des différences clés entre les types complexes et les types d'entités :

  • Les types complexes n'ont pas d'identité (ni de clés), par conséquent, ils ne peuvent pas exister indépendamment. Les types complexes peuvent uniquement exister en tant que propriétés de types d'entités ou d'autres types complexes.
  • Les types complexes ne peuvent pas participer à des associations. Aucune terminaison d'association ne peut être un type complexe ; par conséquent, il n'est pas possible de définir des propriétés de navigation pour des types complexes.
  • Une propriété de type complexe ne peut pas avoir de valeur NULL, bien que les propriétés scalaires d'un type complexe puissent chacune être définie sur NULL.

Un élément ComplexType peut avoir les éléments enfants suivants, (dans l'ordre indiqué) :

  • Documentation (zéro ou un élément)
  • Property (zéro, un ou plusieurs éléments)
  • Éléments d’annotation (zéro ou plusieurs éléments)

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

Nom de l’attribut Est obligatoire Valeur
Nom Oui Nom du type complexe. Le nom d'un type complexe ne peut pas être identique au nom d'un autre type complexe, d'un type d'entité ou d'une association qui figure dans l'étendue du modèle.
BaseType Non Nom d'un autre type complexe qui est le type de base du type complexe en cours de définition.
[!NOTE]
> Cet attribut n’est pas applicable dans CSDL v1. L'héritage pour les types complexes n'est pas pris en charge dans cette version.
Description Non True ou False (valeur par défaut) selon que le type complexe est un type abstrait.
[!NOTE]
> Cet attribut n’est pas applicable dans CSDL v1. Les types complexes dans cette version ne peuvent pas être des types abstraits.

 

Remarque

Un nombre quelconque d’attributs d’annotation (attributs XML personnalisés) peut être appliqué à l’élément ComplexType. 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 type complexe Address, avec les propriétés EdmSimpleType StreetAddress, City, StateOrProvince, Countryet PostalCode.

 <ComplexType Name="Address" >
   <Property Type="String" Name="StreetAddress" Nullable="false" />
   <Property Type="String" Name="City" Nullable="false" />
   <Property Type="String" Name="StateOrProvince" Nullable="false" />
   <Property Type="String" Name="Country" Nullable="false" />
   <Property Type="String" Name="PostalCode" Nullable="false" />
 </ComplexType>

 

Pour définir le type complexe Address (ci-dessus) en tant que propriété d'un type d'entité, vous devez déclarer le type de propriété dans la définition de type d'entité. L'exemple suivant montre la propriété Address sous la forme d'un type complexe sur un type d'entité (Publisher) :

 <EntityType Name="Publisher">
       <Key>
         <PropertyRef Name="Id" />
       </Key>
       <Property Type="Int32" Name="Id" Nullable="false" />
       <Property Type="String" Name="Name" Nullable="false" />
       <Property Type="BooksModel.Address" Name="Address" Nullable="false" />
       <NavigationProperty Name="Books" Relationship="BooksModel.PublishedBy"
                           FromRole="Publisher" ToRole="Book" />
     </EntityType>

 

 

DefiningExpression, élément (CSDL)

L'élément DefiningExpression dans le langage CSDL (Conceptual Schema Definition Language) contient une expression qui définit une fonction dans le modèle conceptuel.  

Remarque

À des fins de validation, un élément DefiningExpression peut contenir un contenu arbitraire. Toutefois, Entity Framework lève une exception au moment de l’exécution si un élément DefiningExpression ne contient pas d’entité SQL valide.

 

Attributs applicables

Un nombre quelconque d’attributs d’annotation (attributs XML personnalisés) peut être appliqué à l’élément DefiningExpression. 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 utilise un élément DefiningExpression pour définir une fonction qui retourne le nombre d'années depuis qu'un ouvrage a été publié. Le contenu de l’élément DefiningExpression est écrit dans Entity SQL.

 <Function Name="GetYearsInPrint" ReturnType="Edm.Int32" >
       <Parameter Name="book" Type="BooksModel.Book" />
       <DefiningExpression>
         Year(CurrentDateTime()) - Year(cast(book.PublishedDate as DateTime))
       </DefiningExpression>
     </Function>

 

 

Dependent, élément (CSDL)

L'élément Dependent dans le langage CSDL (Conceptual Schema Definition Language) est un élément enfant de l'élément ReferentialConstraint et il définit la terminaison dépendante d'une contrainte référentielle. Un élément ReferentialConstraint définit des fonctionnalités qui sont semblables à une contrainte d'intégrité référentielle dans une base de données relationnelle. De la même manière qu’une ou plusieurs colonnes d’une table de base de données peuvent référencer la clé primaire d’une autre table, une ou plusieurs propriétés d’un type d’entité peuvent référencer la clé d’entité d’un autre type d’entité. Le type d’entité référencé est appelé terminaison principale de la contrainte. Le type d’entité qui référence la terminaison principale est appelé terminaison dépendante de la contrainte. Les éléments PropertyRef sont utilisés pour spécifier les clés qui référencent la terminaison principale.

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

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

Attributs applicables

Le tableau ci-dessous décrit les attributs qui peuvent s'appliquer à l'élément Dependent.

Nom de l’attribut Est obligatoire Valeur
Rôle Oui Nom du type d'entité au niveau de la terminaison dépendante de l'association.

 

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 illustre un élément ReferentialConstraint qui est utilisé dans le cadre de la définition de l'association PublishedBy. La propriété PublisherId du type d'entité Book compose la terminaison dépendante de la contrainte référentielle.

 <Association Name="PublishedBy">
   <End Type="BooksModel.Book" Role="Book" Multiplicity="*" >
   </End>
   <End Type="BooksModel.Publisher" Role="Publisher" Multiplicity="1" />
   <ReferentialConstraint>
     <Principal Role="Publisher">
       <PropertyRef Name="Id" />
     </Principal>
     <Dependent Role="Book">
       <PropertyRef Name="PublisherId" />
     </Dependent>
   </ReferentialConstraint>
 </Association>

 

 

Documentation, élément (CSDL)

L'élément Documentation dans le langage CSDL (Conceptual Schema Definition Language) permet de fournir des informations sur un objet défini dans un élément parent. Dans un fichier .edmx, lorsque l'élément Documentation est un enfant d'un élément qui apparaît comme un objet sur l'aire de conception d'EF Designer (tel qu'une entité, une association ou une propriété), le contenu de l'élément Documentation apparaîtra dans la fenêtre Properties Visual Studio pour l'objet.

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).
  • Éléments d'annotation. (zéro, un ou plusieurs éléments).

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. Si l’extrait de code ci-dessous se trouvait dans le contenu CSDL d’un fichier .edmx, le contenu du résumé et éléments LongDescription s’affichent dans la fenêtre Propriétés de Visual Studio lorsque vous cliquez sur le type d’entité Customer.

 <EntityType Name="Customer">
    <Documentation>
      <Summary>Summary here.</Summary>
      <LongDescription>Long description here.</LongDescription>
    </Documentation>
    <Key>
      <PropertyRef Name="CustomerId" />
    </Key>
    <Property Type="Int32" Name="CustomerId" Nullable="false" />
    <Property Type="String" Name="Name" Nullable="false" />
 </EntityType>

 

 

End, élément (CSDL)

L'élément Fin dans le langage CSDL (Conceptual Schema Definition Language) peut être un enfant de l'élément Association ou de l'élément AssociationSet. Dans chacun de ces cas, le rôle de l'élément Fin et les attributs applicables sont différents.

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

Un élément End (comme enfant de l'élément Association) identifie le type d'entité au niveau de la terminaison d'une association et le nombre d'instances de type d'entité qui peuvent exister au niveau de cette terminaison d'une association. Les terminaisons d'association sont définies dans le cadre d'une association ; une association doit avoir exactement deux terminaisons d'association. Il est possible d’accéder aux instances de type entité au niveau d’une terminaison d’une association via des propriétés de navigation ou des clés étrangères, si elles sont exposées sur un type entité.  

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 du type d'entité au niveau de la terminaison de l'association.
Rôle Non Nom de la terminaison de l'association. Si aucun nom n'est fourni, le nom du type d'entité au niveau de la terminaison de l'association sera utilisé.
Multiplicité Oui 1, 0..1, ou * selon le nombre des instances de type d'entité qui peuvent figurer au niveau de la terminaison de l'association.
1 indique qu'exactement une instance de type d'entité existe au niveau de la terminaison de l'association.
0..1 indique que zéro ou une instance de type d'entité existe au niveau de la terminaison de l'association.
* indique que zéro, une ou plusieurs instances de type d'entité existent au niveau de la terminaison de l'association.

 

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 illustre un élément Association qui définit l'association CustomerOrders. Les valeurs Multiplicité pour chaque Fin de l’association indiquent que de nombreuses Commandes peuvent être associées à un Customer, mais qu’un seul Client peut être associé à une commande. En outre, l’élément OnDelete indique que tous les Orders liés à un Client particulier et qui ont été chargés dans ObjectContext seront supprimés si le Client est supprimé.

 <Association Name="CustomerOrders">
   <End Type="ExampleModel.Customer" Role="Customer" Multiplicity="1" />
   <End Type="ExampleModel.Order" Role="Order" Multiplicity="*">
         <OnDelete Action="Cascade" />
   </End>
 </Association>

 

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

L'élément Fin spécifie une terminaison d'un ensemble d'associations. L’élément AssociationSet doit contenir deux éléments Fin . Les informations contenues dans un élément Endsont utilisées pour le mappage d'un ensemble d'associations à une source de données.

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

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

Remarque

Les éléments d'annotation doivent figurer après tous les autres éléments enfants. Les éléments d’annotation sont autorisés uniquement dans CSDL v2 et versions ultérieures.

 

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'élément EntitySet qui définit une terminaison de l'élément AssociationSet parent. L'élément EntitySet doit être défini dans le même conteneur d'entités que l'élément AssociationSet parent.
Rôle Non Nom de la terminaison de l'ensemble d'associations. Si l'attribut Role n'est pas utilisé, le nom de la terminaison de l'ensemble d'associations est le nom du jeu d'entités.

 

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 deux éléments AssociationSet , chacun avec deux éléments End :

 <EntityContainer Name="BooksContainer" >
   <EntitySet Name="Books" EntityType="BooksModel.Book" />
   <EntitySet Name="Publishers" EntityType="BooksModel.Publisher" />
   <EntitySet Name="Authors" EntityType="BooksModel.Author" />
   <AssociationSet Name="PublishedBy" Association="BooksModel.PublishedBy">
     <End Role="Book" EntitySet="Books" />
     <End Role="Publisher" EntitySet="Publishers" />
   </AssociationSet>
   <AssociationSet Name="WrittenBy" Association="BooksModel.WrittenBy">
     <End Role="Book" EntitySet="Books" />
     <End Role="Author" EntitySet="Authors" />
   </AssociationSet>
 </EntityContainer>

 

 

EntityContainer, élément (CSDL)

L’élément EntityContainer dans le langage de définition de schéma conceptuel (CSDL) est un conteneur logique pour les jeux d’entités, les jeux d’associations et les importations de fonctions. Un conteneur d'entités de modèle conceptuel est mappé à un conteneur d'entités de modèle de stockage via l'élément EntityContainerMapping. Un conteneur d'entités de modèle de stockage décrit la structure de la base de données : les jeux d'entités décrivent les tables, les ensembles d'associations décrivent les contraintes de clé étrangère et les importations de fonction décrivent les procédures stockées dans une base de données.

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

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

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

Vous pouvez étendre un élément EntityContainer pour inclure le contenu d’un autre EntityContainer qui se trouve dans le même espace de noms. Pour inclure le contenu d’un autre EntityContainer, dans le référencement élément EntityContainer, définissez la valeur de l’attribut Extends sur le nom de l’élément EntityContainer EntityContainer que vous souhaitez inclure. Tous les éléments enfants de l’élément EntityContainer inclus seront traités comme des éléments enfants de l’élément de référencement EntityContainer.

Attributs applicables

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

Nom de l’attribut Est obligatoire Valeur
Nom Oui Nom du conteneur d'entités.
Extends Non Le nom d'un autre conteneur d'entités au sein du même espace de noms.

 

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 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 qui définit trois jeux d'entités et deux ensembles d'associations.

 <EntityContainer Name="BooksContainer" >
   <EntitySet Name="Books" EntityType="BooksModel.Book" />
   <EntitySet Name="Publishers" EntityType="BooksModel.Publisher" />
   <EntitySet Name="Authors" EntityType="BooksModel.Author" />
   <AssociationSet Name="PublishedBy" Association="BooksModel.PublishedBy">
     <End Role="Book" EntitySet="Books" />
     <End Role="Publisher" EntitySet="Publishers" />
   </AssociationSet>
   <AssociationSet Name="WrittenBy" Association="BooksModel.WrittenBy">
     <End Role="Book" EntitySet="Books" />
     <End Role="Author" EntitySet="Authors" />
   </AssociationSet>
 </EntityContainer>

 

 

EntitySet, élément (CSDL)

L'élément EntitySet dans le langage CSDL (Conceptual Schema Definition Language) est un conteneur logique pour les instances d'un type d'entité et les instances de tout type dérivé de ce type d'entité. La relation entre un type d'entité et un jeu d'entités est analogue à la relation entre une ligne et une table dans une base de données relationnelle. Comme une ligne, un type d'entité définit un jeu de données connexes et, comme une table, un jeu d'entités contient des instances de cette définition. Un jeu d'entités fournit une construction pour le regroupement d'instances du type d'entité, afin qu'elles puissent être mappées aux structures de données associées dans une source de données.  

Plusieurs jeux d'entités peuvent être définis pour un type d'entité particulier.

Remarque

EF Designer ne prend pas en charge les modèles conceptuels qui contiennent plusieurs jeux d’entités par type.

 

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

  • Élément Documentation (zéro ou un élément autorisé)
  • Éléments d'annotation (zéro, un ou plusieurs éléments autorisés)

Attributs applicables

Le tableau ci-dessous décrit les attributs qui peuvent s'appliquer à l'élément EntitySet.

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.

 

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 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 deux éléments EntitySet :

 <EntityContainer Name="BooksContainer" >
   <EntitySet Name="Books" EntityType="BooksModel.Book" />
   <EntitySet Name="Publishers" EntityType="BooksModel.Publisher" />
   <EntitySet Name="Authors" EntityType="BooksModel.Author" />
   <AssociationSet Name="PublishedBy" Association="BooksModel.PublishedBy">
     <End Role="Book" EntitySet="Books" />
     <End Role="Publisher" EntitySet="Publishers" />
   </AssociationSet>
   <AssociationSet Name="WrittenBy" Association="BooksModel.WrittenBy">
     <End Role="Book" EntitySet="Books" />
     <End Role="Author" EntitySet="Authors" />
   </AssociationSet>
 </EntityContainer>

 

Il est possible de définir des jeux d'entités multiples par type (MEST). L'exemple suivant définit un conteneur d'entités avec deux jeux d'entités pour le type d'entité Book :

 <EntityContainer Name="BooksContainer" >
   <EntitySet Name="Books" EntityType="BooksModel.Book" />
   <EntitySet Name="FictionBooks" EntityType="BooksModel.Book" />
   <EntitySet Name="Publishers" EntityType="BooksModel.Publisher" />
   <EntitySet Name="Authors" EntityType="BooksModel.Author" />
   <AssociationSet Name="PublishedBy" Association="BooksModel.PublishedBy">
     <End Role="Book" EntitySet="Books" />
     <End Role="Publisher" EntitySet="Publishers" />
   </AssociationSet>
   <AssociationSet Name="BookAuthor" Association="BooksModel.BookAuthor">
     <End Role="Book" EntitySet="Books" />
     <End Role="Author" EntitySet="Authors" />
   </AssociationSet>
 </EntityContainer>

 

 

EntityType, élément (CSDL)

L’élément EntityType représente la structure d’un concept de niveau supérieur, tel qu’un client ou une commande, dans un modèle conceptuel. Un type d'entité est un modèle pour des instances de types d'entités dans une application. Chaque modèle contient les informations suivantes :

  • Nom unique. (Obligatoire.)
  • Clé d'entité définie par une ou plusieurs propriétés. (Obligatoire.)
  • Propriétés pour contenir des données. (Facultatif.)
  • Propriétés de navigation permettant de naviguer d’une terminaison d’une association à l’autre. (Facultatif.)

Dans une application, une instance d'un type d'entité représente un objet spécifique (tel qu'un client ou une commande spécifique). Chaque instance d’un type d’entité doit avoir une clé d’entité unique dans un jeu d’entités.

Deux instances de type d'entité sont considérées égales seulement si elles sont du même type et si les valeurs de leurs clés d'entité sont identiques.

Un é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)
  • Property (zéro, un ou plusieurs éléments)
  • NavigationProperty (zéro, un ou plusieurs éléments)
  • Éléments d’annotation (zéro ou plusieurs éléments)

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é.
BaseType Non Le nom d’un autre type d’entité qui est le type de base du type d’entité défini.
Abstract Non True ou False, selon que le type d’entité est un type abstrait.
OpenType Non True ou False selon que le type d’entité est un type d’entité ouvert.
[!NOTE]
> L’attribut OpenType s’applique uniquement aux types d’entités définis dans les modèles conceptuels utilisés avec ADO.NET Data Services.

 

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 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 EntityType avec trois éléments Property et deux éléments NavigationProperty :

 <EntityType Name="Book">
   <Key>
     <PropertyRef Name="ISBN" />
   </Key>
   <Property Type="String" Name="ISBN" Nullable="false" />
   <Property Type="String" Name="Title" Nullable="false" />
   <Property Type="Decimal" Name="Revision" Nullable="false" Precision="29" Scale="29" />
   <NavigationProperty Name="Publisher" Relationship="BooksModel.PublishedBy"
                       FromRole="Book" ToRole="Publisher" />
   <NavigationProperty Name="Authors" Relationship="BooksModel.WrittenBy"
                       FromRole="Book" ToRole="Author" />
 </EntityType>

 

 

EnumType, élément (CSDL)

L’élément EnumType représente un type énuméré.

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

  • Documentation (zéro ou un élément)
  • Membre (zéro ou plusieurs éléments)
  • Éléments d’annotation (zéro ou plusieurs éléments)

Attributs applicables

Le tableau ci-dessous décrit les attributs qui peuvent s'appliquer à l'élément EnumType.

Nom de l’attribut Est obligatoire Valeur
Nom Oui Le nom du type d’entité.
IsFlags Non True ou False, selon que le type d’énumération peut être utilisé comme ensemble d’indicateurs. La valeur par défaut est False..
UnderlyingType Non Edm.Byte, Edm.Int16, Edm.Int32, Edm.Int64 ou Edm.SByte définissant la plage de valeurs du type.   Le type sous-jacent par défaut des éléments d’énumération est Edm.Int32..

 

Remarque

Un nombre quelconque d’attributs d’annotation (attributs XML personnalisés) peut être appliqué à l’élément EnumType. 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 EnumType avec trois éléments Member :

 <EnumType Name="Color" IsFlags=”false” UnderlyingTyp=”Edm.Byte”>
   <Member Name="Red" />
   <Member Name="Green" />
   <Member Name="Blue" />
 </EntityType>

 

 

Function, élément (CSDL)

L’élément Function dans le langage de définition de schéma conceptuel (CSDL) est utilisé pour définir ou déclarer des fonctions dans le modèle conceptuel. Une fonction est définie à l’aide d’un élément DefiningExpression.  

Un é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 plusieurs éléments)
  • DefiningExpression (zéro ou un élément)
  • ReturnType (Function) (zéro ou un élément)
  • Éléments d’annotation (zéro ou plusieurs éléments)

Un type de retour pour une fonction doit être spécifié avec l’élément ReturnType (Function) ou l’attribut ReturnType (voir ci-dessous), mais pas les deux. Les types de retour possibles correspondent à tout type EdmSimpleType, type d'entité, type complexe, type de ligne ou type REF (ou à une collection de l'un de ces types).

Attributs applicables

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

Nom de l’attribut Est obligatoire Valeur
Nom Oui Nom de la fonction.
ReturnType Non Type retourné par la 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 CSDL. Les noms qualifiés complets de deux attributs personnalisés quelconques ne peuvent pas être identiques.

 

Exemple

L’exemple suivant utilise un élément Function pour définir une fonction qui retourne le nombre d’années depuis l’embauche d’un instructeur.

 <Function Name="YearsSince" ReturnType="Edm.Int32">
   <Parameter Name="date" Type="Edm.DateTime" />
   <DefiningExpression>
     Year(CurrentDateTime()) - Year(date)
   </DefiningExpression>
 </Function>

 

 

FunctionImport, élément (CSDL)

L’élément FunctionImport dans le langage de définition de schéma conceptuel (CSDL) représente une fonction définie dans la source de données, mais disponible pour les objets via le modèle conceptuel. Par exemple, un élément Function dans le modèle de stockage peut être utilisé pour représenter une procédure stockée dans une base de données. Un élément FunctionImport dans le modèle conceptuel représente la fonction correspondante dans une application Entity Framework et est mappée à la fonction de modèle de stockage à l’aide de l’élément FunctionImportMapping. Lorsque la fonction est appelée dans l'application, la procédure stockée correspondante est exécutée dans la base de données.

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

  • Documentation (zéro ou un élément autorisé)
  • Parameter (zéro, un ou plusieurs éléments autorisés)
  • Éléments d'annotation (zéro, un ou plusieurs éléments autorisés)
  • ReturnType (FunctionImport) (zéro ou plusieurs éléments autorisés)

Un élément Paramètre doit être défini pour chaque paramètre accepté par la fonction.

Un type de retour pour une fonction doit être spécifié avec l’élément ReturnType (FunctionImport) ou l’attribut ReturnType (voir ci-dessous), mais pas les deux. La valeur du type de retour doit être une collection d’EdmSimpleType, EntityType ou ComplexType.

Attributs applicables

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

Nom de l’attribut Est obligatoire Valeur
Nom Oui Nom de la fonction importée.
ReturnType Non Type retourné par la fonction. N’utilisez pas cet attribut si la fonction ne renvoie pas de valeur. Sinon, la valeur doit être une collection de ComplexType, EntityType ou EDMSimpleType.
EntitySet Non Si la fonction retourne une collection de types d’entités, la valeur de EntitySet doit être l’entité définie sur laquelle appartient la collection. Dans le cas contraire, l’attribut EntitySet ne doit pas être utilisé.
IsComposable Non Si la valeur est définie sur true, la fonction est composable (fonction table) et peut être utilisée dans une requête LINQ.  La valeur par défaut est false.

 

Remarque

Un nombre quelconque d’attributs d’annotation (attributs XML personnalisés) peut être appliqué à l’élément FunctionImport. 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 FunctionImport qui accepte un paramètre et retourne une collection de types d’entités :

 <FunctionImport Name="GetStudentGrades"
                 EntitySet="StudentGrade"
                 ReturnType="Collection(SchoolModel.StudentGrade)">
        <Parameter Name="StudentID" Mode="In" Type="Int32" />
 </FunctionImport>

 

 

Key, élément (CSDL)

L’élément clé est un élément enfant de l’élément EntityType et définit une clé d’entité (une propriété ou un ensemble de propriétés d’un type d’entité qui détermine l’identité). Les propriétés qui composent une clé d'entité sont choisies au moment du design. Les valeurs des propriétés de clé d’entité doivent identifier de façon unique une instance de type d’entité dans un jeu d’entités au moment de l’exécution. Les propriétés qui composent une clé d'entité doivent être choisies pour garantir l'unicité des instances dans un jeu d'entités. L’élément Clé définit une clé d’entité en référençant une ou plusieurs des propriétés d’un type d’entité.

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

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

Attributs applicables

Un nombre quelconque d'attributs d'annotation (attributs XML personnalisés) peut être appliqué à l'élément Clé. 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 définit un type d’entité nommé Book. La clé d’entité est définie en référençant la propriété ISBN du type d’entité.

 <EntityType Name="Book">
   <Key>
     <PropertyRef Name="ISBN" />
   </Key>
   <Property Type="String" Name="ISBN" Nullable="false" />
   <Property Type="String" Name="Title" Nullable="false" />
   <Property Type="Decimal" Name="Revision" Nullable="false" Precision="29" Scale="29" />
   <NavigationProperty Name="Publisher" Relationship="BooksModel.PublishedBy"
                       FromRole="Book" ToRole="Publisher" />
   <NavigationProperty Name="Authors" Relationship="BooksModel.WrittenBy"
                       FromRole="Book" ToRole="Author" />
 </EntityType>

 

La propriété ISBN est un bon choix pour la clé d’entité, car un numéro de livre standard international (ISBN) identifie de manière unique un livre.

L’exemple suivant montre un type d’entité (Author) qui a une clé d’entité qui se compose de deux propriétés, Name et Address.

 <EntityType Name="Author">
   <Key>
     <PropertyRef Name="Name" />
     <PropertyRef Name="Address" />
   </Key>
   <Property Type="String" Name="Name" Nullable="false" />
   <Property Type="String" Name="Address" Nullable="false" />
   <NavigationProperty Name="Books" Relationship="BooksModel.WrittenBy"
                       FromRole="Author" ToRole="Book" />
 </EntityType>

 

L’utilisation de Name et Address pour la clé d’entité est un choix raisonnable, car deux auteurs du même nom ne sont pas susceptibles de vivre à la même adresse. Toutefois, ce choix pour une clé d'entité ne garantit pas vraiment l'unicité des clés d'entité dans un jeu d'entités. L’ajout d’une propriété, telle que AuthorId, qui peut être utilisée pour identifier de manière unique un auteur est recommandée dans ce cas.

 

Élément membre (CSDL)

L’élément Membre est un élément enfant de l’élément EnumType et définit un membre du type énuméré.

Attributs applicables

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

Nom de l’attribut Est obligatoire Valeur
Nom Oui Nom du membre.
Valeur Non Valeur du membre. Par défaut, le premier membre a la valeur 0 et la valeur de chaque énumérateur successif est incrémentée de 1. Plusieurs membres ayant les mêmes valeurs peuvent exister.

 

Remarque

Un nombre quelconque d’attributs d’annotation (attributs XML personnalisés) peut être appliqué à l’élément FunctionImport. 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 EnumType avec trois éléments Member :

 <EnumType Name="Color">
   <Member Name="Red" Value=”1”/>
   <Member Name="Green" Value=”3” />
   <Member Name="Blue" Value=”5”/>
 </EntityType>

 

 

Un élément NavigationProperty définit une propriété de navigation, qui fournit une référence à l’autre extrémité d’une association. Contrairement aux propriétés définies à l'aide de l'élément Property, les propriétés de navigation ne définissent pas la forme et les caractéristiques des données. Elles fournissent un moyen d'explorer une association entre deux types d'entités.

Notez que les propriétés de navigation sont facultatives sur les deux types d'entités au niveau des terminaisons d'une association. Si vous définissez une propriété de navigation sur un type d'entité au niveau de la terminaison d'une association, il n'est pas nécessaire de définir une propriété de navigation sur le type d'entité à l'autre terminaison de l'association.

Le type de données retourné par une propriété de navigation est déterminé par la multiplicité de sa terminaison d'association distante. Par exemple, supposons qu’une propriété de navigation, OrdersNavProp, existe sur un type d’entité client et navigue dans une association un-à-plusieurs entre Customer et Order. Étant donné que la fin de l’association distante pour la propriété de navigation a plusieurs (*), son type de données est une collection (de Order). De même, si une propriété de navigation, CustomerNavProp, existe sur le type d’entité Order, son type de données est Customer, car la multiplicité de la fin distante est une (1).

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

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

Attributs applicables

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

Nom de l’attribut Est obligatoire Valeur
Nom Oui Nom de la propriété de navigation.
Relation Oui Nom d'une association figurant dans l'étendue du modèle.
ToRole Oui Terminaison de l'association à laquelle la navigation prend fin. La valeur de l’attribut ToRole doit être identique à la valeur de l’un des attributs Role définis sur l’une des extrémités de l’association (définies dans l’élément AssociationEnd).
FromRole Oui Terminaison de l'association où la navigation commence. La valeur de l’attribut FromRole doit être identique à la valeur de l’un des attributs Role définis sur l’une des extrémités de l’association (définies dans l’élément AssociationEnd).

 

Remarque

Un nombre quelconque d’attributs d’annotation (attributs XML personnalisés) peut être appliqué à l’élément NavigationProperty. 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 définit un type d’entité (Book) avec deux propriétés de navigation (PublishedBy et WrittenBy) :

 <EntityType Name="Book">
   <Key>
     <PropertyRef Name="ISBN" />
   </Key>
   <Property Type="String" Name="ISBN" Nullable="false" />
   <Property Type="String" Name="Title" Nullable="false" />
   <Property Type="Decimal" Name="Revision" Nullable="false" Precision="29" Scale="29" />
   <NavigationProperty Name="Publisher" Relationship="BooksModel.PublishedBy"
                       FromRole="Book" ToRole="Publisher" />
   <NavigationProperty Name="Authors" Relationship="BooksModel.WrittenBy"
                       FromRole="Book" ToRole="Author" />
 </EntityType>

 

 

OnDelete, élément (CSDL)

L’élément OnDelete dans le langage de définition de schéma conceptuel (CSDL) définit le comportement connecté à une association. Si l’attribut Action a la valeur Cascade sur une extrémité d’une association, les types d’entités associés à l’autre extrémité de l’association sont supprimés lorsque le type d’entité à la première fin est supprimé. Si l’association entre deux types d’entités est une relation de clé primaire à clé primaire, un objet dépendant chargé est supprimé lorsque l’objet principal à l’autre extrémité de l’association est supprimé, quelle que soit la spécification OnDelete.  

Remarque

L’élément OnDelete affecte uniquement le comportement d’exécution d’une application ; elle n’affecte pas le comportement dans la source de données. Le comportement défini dans la source de données doit être le même que le comportement défini dans l'application.

 

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

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

Attributs applicables

Le tableau ci-dessous 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. Si cascade, les types d’entités dépendants sont supprimés lorsque le type d’entité principal est supprimé. Si Aucun, les types d’entités dépendants ne sont pas supprimés lorsque le type d’entité principal est supprimé.

 

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 CSDL. Les noms qualifiés complets de deux attributs personnalisés quelconques ne peuvent pas être identiques.

 

Exemple

L'exemple suivant illustre un élément Association qui définit l'association CustomerOrders. L’élément OnDelete indique que tous les Orders liés à un Customer particulier et qui ont été chargés dans ObjectContext seront supprimés lorsque le client est supprimé.

 <Association Name="CustomerOrders">
   <End Type="ExampleModel.Customer" Role="Customer" Multiplicity="1">
         <OnDelete Action="Cascade" />
   </End>
   <End Type="ExampleModel.Order" Role="Order" Multiplicity="*" />
 </Association>

 

 

Parameter, élément (CSDL)

L’élément Parameter dans le langage de définition de schéma conceptuel (CSDL) peut être un enfant de l’élément FunctionImport ou de l’élément Function.

Application de l'élément FunctionImport

Un élément Parameter (en tant qu’enfant de l’élément FunctionImport) est utilisé pour définir des paramètres d’entrée et de sortie pour les importations de fonction déclarées dans CSDL.

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

  • Documentation (zéro ou un élément autorisé)
  • Éléments d'annotation (zéro, un ou plusieurs éléments autorisés)

Attributs applicables

Le tableau suivant 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. La valeur doit être de type EDMSimpleType ou de type complexe, dans la portée du modèle.
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 La longueur maximale autorisée 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 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 FunctionImport avec un élément Parameter enfant. La fonction accepte un paramètre d'entrée et retourne une collection de types d'entités.

 <FunctionImport Name="GetStudentGrades"
                 EntitySet="StudentGrade"
                 ReturnType="Collection(SchoolModel.StudentGrade)">
        <Parameter Name="StudentID" Mode="In" Type="Int32" />
 </FunctionImport>

 

Application de l'élément Function

Un élément Parameter (en tant qu’enfant de l’élément Function) définit des paramètres pour les fonctions définies ou déclarées dans un modèle conceptuel.

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

  • Documentation (zéro ou un élément)
  • CollectionType (zéro ou un élément)
  • ReferenceType (zéro ou un élément)
  • RowType (zéro ou un élément)

Remarque

Une seule des CollectionType, ReferenceTypeou éléments RowType peut être un élément enfant d’un élément Property.

 

  • Éléments d'annotation (zéro, un ou plusieurs éléments autorisés)

Remarque

Les éléments d'annotation doivent figurer après tous les autres éléments enfants. Les éléments d’annotation sont autorisés uniquement dans CSDL v2 et versions ultérieures.

 

Attributs applicables

Le tableau suivant 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 Non Le type du paramètre. Un paramètre peut correspondre à l'un quelconque des types suivants (ou à des collections de ces types) :
EdmSimpleType
type d'entité
type complexe
type de ligne
type référence
Nullable Non True (valeur par défaut) ou False selon que la propriété peut avoir une valeur null.
DefaultValue Non Valeur par défaut de la propriété.
MaxLength Non Longueur maximale de la valeur de propriété.
FixedLength Non True ou False selon que la valeur de propriété sera stockée sous forme de chaîne de longueur fixe.
Précision Non Précision de la valeur de propriété.
Mise à l’échelle Non Échelle de la valeur de propriété.
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).
Unicode Non True ou False selon que la valeur de propriété 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.

 

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 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 Function qui utilise un élément Parameter enfant pour définir un paramètre de fonction.

 <Function Name="GetYearsEmployed" ReturnType="Edm.Int32">
 <Parameter Name="Instructor" Type="SchoolModel.Person" />
   <DefiningExpression>
   Year(CurrentDateTime()) - Year(cast(Instructor.HireDate as DateTime))
   </DefiningExpression>
 </Function>

 

Principal, élément (CSDL)

L’élément Principal dans le langage de définition de schéma conceptuel (CSDL) est un élément enfant de l’élément ReferentialConstraint qui définit la fin du principal d’une contrainte référentielle. Un élément ReferentialConstraint définit des fonctionnalités qui sont semblables à une contrainte d'intégrité référentielle dans une base de données relationnelle. De la même manière qu’une ou plusieurs colonnes d’une table de base de données peuvent référencer la clé primaire d’une autre table, une ou plusieurs propriétés d’un type d’entité peuvent référencer la clé d’entité d’un autre type d’entité. Le type d’entité référencé est appelé terminaison principale de la contrainte. Le type d’entité qui référence la terminaison principale est appelé terminaison dépendante de la contrainte. PropertyRef éléments sont utilisés pour spécifier les clés référencées par la fin dépendante.

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

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

Attributs applicables

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

Nom de l’attribut Est obligatoire Valeur
Rôle Oui Nom du type d'entité au niveau de la terminaison principale de l'association.

 

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 ReferentialConstraint qui fait partie de la définition de l’association PublishedBy. L’ID propriété du type d’entité Publisher constitue la fin principale de la contrainte référentielle.

 <Association Name="PublishedBy">
   <End Type="BooksModel.Book" Role="Book" Multiplicity="*" >
   </End>
   <End Type="BooksModel.Publisher" Role="Publisher" Multiplicity="1" />
   <ReferentialConstraint>
     <Principal Role="Publisher">
       <PropertyRef Name="Id" />
     </Principal>
     <Dependent Role="Book">
       <PropertyRef Name="PublisherId" />
     </Dependent>
   </ReferentialConstraint>
 </Association>

 

 

Property, élément (CSDL)

L’élément Property dans le langage de définition de schéma conceptuel (CSDL) peut être un enfant de l’élément EntityType, de l’élément ComplexType ou de l’élément RowType.

Applications des éléments EntityType et ComplexType

Propriété éléments (en tant qu’enfants de EntityType ou éléments ComplexType ) définissent la forme et les caractéristiques des données qu’une instance de type d’entité ou une instance de type complexe contiendra. Les propriétés dans un modèle conceptuel sont analogues aux propriétés qui sont définies sur une classe. De même que les propriétés sur une classe définissent la forme de la classe et acheminent des informations sur les objets, les propriétés dans un modèle conceptuel définissent la forme d'un type d'entité et acheminent des informations sur les instances de type d'entité.

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

  • Élément Documentation (zéro ou un élément autorisé)
  • Éléments d'annotation (zéro, un ou plusieurs éléments autorisés)

Les facettes suivantes peuvent être appliquées à un élément Property : Nullable, DefaultValue, MaxLength, FixedLength, Precision, Scale, Unicode, classement, ConcurrencyMode. Les facettes sont des attributs XML qui fournissent des informations sur la manière dont les valeurs de propriété sont stockées dans la banque de données.

Remarque

Les facettes ne peuvent être appliquées qu’aux propriétés de type EDMSimpleType.

 

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 Le nom de la propriété.
Type Oui Type de la valeur de propriété. Le type de la valeur de propriété doit être un type EDMSimpleType ou un type complexe (indiqué par un nom qualifié complet) qui se trouve dans la portée du modèle.
Nullable Non True (valeur par défaut) ou False selon que la propriété peut avoir ou non une valeur null.
[!NOTE]
> Dans le CSDL v1, une propriété de type complexe doit avoir Nullable="False".
DefaultValue Non Valeur par défaut de la propriété.
MaxLength Non Longueur maximale de la valeur de propriété.
FixedLength Non True ou False selon que la valeur de propriété sera stockée sous forme de chaîne de longueur fixe.
Précision Non Précision de la valeur de propriété.
Mise à l’échelle Non Échelle de la valeur de propriété.
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).
Unicode Non True ou False selon que la valeur de propriété 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.
ConcurrencyMode Non None (valeur par défaut) ou Fixed. Si la valeur est définie sur Fixed, la valeur de propriété sera utilisée dans les contrôles d’accès concurrentiel optimiste.

 

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 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 EntityType avec trois éléments Property :

 <EntityType Name="Book">
   <Key>
     <PropertyRef Name="ISBN" />
   </Key>
   <Property Type="String" Name="ISBN" Nullable="false" />
   <Property Type="String" Name="Title" Nullable="false" />
   <Property Type="Decimal" Name="Revision" Nullable="false" Precision="29" Scale="29" />
   <NavigationProperty Name="Publisher" Relationship="BooksModel.PublishedBy"
                       FromRole="Book" ToRole="Publisher" />
   <NavigationProperty Name="Authors" Relationship="BooksModel.WrittenBy"
                       FromRole="Book" ToRole="Author" />
 </EntityType>

 

L’exemple suivant montre un élément ComplexType avec cinq éléments Property :

 <ComplexType Name="Address" >
   <Property Type="String" Name="StreetAddress" Nullable="false" />
   <Property Type="String" Name="City" Nullable="false" />
   <Property Type="String" Name="StateOrProvince" Nullable="false" />
   <Property Type="String" Name="Country" Nullable="false" />
   <Property Type="String" Name="PostalCode" Nullable="false" />
 </ComplexType>

 

Application de l'élément RowType

Property éléments (comme enfants d’un élément RowType ) définissent la forme et les caractéristiques des données qui peuvent être passées à une fonction définie par modèle ou renvoyées.  

L’élément Property peut avoir exactement l’un des éléments enfants suivants :

  • CollectionType ;
  • ReferenceType
  • RowType

L’élément Property peut avoir n’importe quel nombre d’éléments d’annotation enfant.

Remarque

Les éléments d’annotation sont autorisés uniquement dans CSDL v2 et versions ultérieures.

 

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 Le nom de la propriété.
Type Oui Type de la valeur de propriété.
Nullable Non True (valeur par défaut) ou False selon que la propriété peut avoir ou non une valeur null.
[!NOTE]
> Dans CSDL v1, une propriété de type complexe doit avoir Nullable="False".
DefaultValue Non Valeur par défaut de la propriété.
MaxLength Non Longueur maximale de la valeur de propriété.
FixedLength Non True ou False selon que la valeur de propriété sera stockée sous forme de chaîne de longueur fixe.
Précision Non Précision de la valeur de propriété.
Mise à l’échelle Non Échelle de la valeur de propriété.
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).
Unicode Non True ou False selon que la valeur de propriété 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.

 

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 CSDL. Les noms qualifiés complets de deux attributs personnalisés quelconques ne peuvent pas être identiques.

 

Exemple

L’exemple suivant montre les éléments Propriété utilisés pour définir la forme du type de retour d’une fonction définie par modèle.

 <Function Name="LastNamesAfter">
   <Parameter Name="someString" Type="Edm.String" />
   <ReturnType>
    <CollectionType>
      <RowType>
        <Property Name="FirstName" Type="Edm.String" Nullable="false" />
        <Property Name="LastName" Type="Edm.String" Nullable="false" />
      </RowType>
    </CollectionType>
   </ReturnType>
   <DefiningExpression>
             SELECT VALUE ROW(p.FirstName, p.LastName)
             FROM SchoolEntities.People AS p
             WHERE p.LastName &gt;= somestring
   </DefiningExpression>
 </Function>

 

 

PropertyRef, élément (CSDL)

L’élément PropertyRef dans le langage de définition de schéma conceptuel (CSDL) fait référence à une propriété d’un type d’entité pour indiquer que la propriété effectuera l’un des rôles suivants :

  • Partie de la clé de l'entité (une propriété ou un jeu de propriétés d'un type d'entité qui détermine l'identité). Un ou plusieurs éléments PropertyRef peuvent être utilisés pour définir une clé d’entité.
  • Terminaison dépendante ou principale d'une contrainte référentielle.

L’élément PropertyRef ne peut avoir que des éléments d’annotation (zéro ou plus) en tant qu’éléments enfants.

Remarque

Les éléments d’annotation sont autorisés uniquement dans CSDL v2 et versions ultérieures.

 

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 ci-dessous définit un type d’entité (Book). La clé d’entité est définie en référençant la propriété ISBN du type d’entité.

 <EntityType Name="Book">
   <Key>
     <PropertyRef Name="ISBN" />
   </Key>
   <Property Type="String" Name="ISBN" Nullable="false" />
   <Property Type="String" Name="Title" Nullable="false" />
   <Property Type="Decimal" Name="Revision" Nullable="false" Precision="29" Scale="29" />
   <NavigationProperty Name="Publisher" Relationship="BooksModel.PublishedBy"
                       FromRole="Book" ToRole="Publisher" />
   <NavigationProperty Name="Authors" Relationship="BooksModel.WrittenBy"
                       FromRole="Book" ToRole="Author" />
 </EntityType>

 

Dans l’exemple suivant, deux éléments PropertyRef sont utilisés pour indiquer que deux propriétés (ID et PublisherId) sont les extrémités principales et dépendantes d’une contrainte référentielle.

 <Association Name="PublishedBy">
   <End Type="BooksModel.Book" Role="Book" Multiplicity="*" >
   </End>
   <End Type="BooksModel.Publisher" Role="Publisher" Multiplicity="1" />
   <ReferentialConstraint>
     <Principal Role="Publisher">
       <PropertyRef Name="Id" />
     </Principal>
     <Dependent Role="Book">
       <PropertyRef Name="PublisherId" />
     </Dependent>
   </ReferentialConstraint>
 </Association>

 

 

Élément ReferenceType (CSDL)

L’élément ReferenceType dans le langage de définition de schéma conceptuel (CSDL) spécifie une référence à un type d’entité. L’élément ReferenceType peut être un enfant des éléments suivants :

  • ReturnType (Function)
  • Paramètre
  • CollectionType ;

L'élément ReferenceType est utilisé lors de la définition d'un paramètre ou d'un type de retour pour une fonction.

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

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

Attributs applicables

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

Nom de l’attribut Est obligatoire Valeur
Type Oui Nom du type d'entité référencé.

 

Remarque

Un nombre quelconque d’attributs d’annotation (attributs XML personnalisés) peut être appliqué à l’élément ReferenceType . 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 ReferenceType utilisé comme enfant d’un élément Parameter dans une fonction définie par modèle qui accepte une référence à un type d’entité Person :

 <Function Name="GetYearsEmployed" ReturnType="Edm.Int32">
   <Parameter Name="instructor">
     <ReferenceType Type="SchoolModel.Person" />
   </Parameter>
   <DefiningExpression>
   Year(CurrentDateTime()) - Year(cast(instructor.HireDate as DateTime))
   </DefiningExpression>
 </Function>

 

L’exemple suivant montre l’élément ReferenceType utilisé comme enfant d’un élément ReturnType (Function) dans une fonction définie par un modèle qui retourne une référence à un type d’entité Person :

 <Function Name="GetPersonReference">
     <Parameter Name="p" Type="SchoolModel.Person" />
     <ReturnType>
         <ReferenceType Type="SchoolModel.Person" />
     </ReturnType>
     <DefiningExpression>
           REF(p)
     </DefiningExpression>
 </Function>

 

 

ReferentialConstraint, élément (CSDL)

Un élément ReferentialConstraint dans le langage de définition de schéma conceptuel (CSDL) définit des fonctionnalités similaires à une contrainte d’intégrité référentielle dans une base de données relationnelle. De la même manière qu’une ou plusieurs colonnes d’une table de base de données peuvent référencer la clé primaire d’une autre table, une ou plusieurs propriétés d’un type d’entité peuvent référencer la clé d’entité d’un autre type d’entité. Le type d’entité référencé est appelé terminaison principale de la contrainte. Le type d’entité qui référence la terminaison principale est appelé terminaison dépendante de la contrainte.

Si une clé étrangère exposée sur un type d’entité fait référence à une propriété sur un autre type d’entité, l’élément ReferentialConstraint définit une association entre les deux types d’entités. Étant donné que l’élément ReferentialConstraint fournit des informations sur la façon dont deux types d’entités sont liés, aucun élément AssociationSetMapping correspondant n’est nécessaire dans le langage de spécification de mappage (MSL). Une association entre deux types d’entités qui n’ont pas de clés étrangères exposées doit avoir un élément AssociationSetMapping correspondant afin de mapper les informations d’association à la source de données.

Si une clé étrangère n’est pas exposée sur un type d’entité, l’élément ReferentialConstraint ne peut définir qu’une contrainte de clé primaire à clé primaire entre le type d’entité et un autre type d’entité.

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

  • Documentation (zéro ou un élément)
  • Principal (exactement un élément)
  • Dépendent (exactement un élément)
  • Éléments d’annotation (zéro ou plusieurs éléments)

Attributs applicables

L’élément ReferentialConstraint peut avoir n’importe quel nombre d’attributs d’annotation (attributs XML personnalisés). 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 illustre un élément ReferentialConstraint qui est utilisé dans le cadre de la définition de l'association PublishedBy.

 <Association Name="PublishedBy">
   <End Type="BooksModel.Book" Role="Book" Multiplicity="*" >
   </End>
   <End Type="BooksModel.Publisher" Role="Publisher" Multiplicity="1" />
   <ReferentialConstraint>
     <Principal Role="Publisher">
       <PropertyRef Name="Id" />
     </Principal>
     <Dependent Role="Book">
       <PropertyRef Name="PublisherId" />
     </Dependent>
   </ReferentialConstraint>
 </Association>

 

 

ReturnType (Function), élément (CSDL)

L’élément ReturnType (Function) dans le langage de définition de schéma conceptuel (CSDL) 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.

Les types de retour peuvent être n’importe quel EdmSimpleType, type d’entité, type complexe, type de ligne, type ref ou collection d’un de ces types.

Le type de retour d’une fonction peut être spécifié avec l’attribut Type de l’élément ReturnType (Function) ou avec l’un des éléments enfants suivants :

  • CollectionType ;
  • ReferenceType
  • RowType

Remarque

Un modèle ne valide pas si vous spécifiez un type de retour de fonction avec l’attribut Type de l’élément ReturnType (Function) et l’un des éléments enfants.

 

Attributs applicables

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

Nom de l’attribut Est obligatoire Valeur
ReturnType Non Type retourné par la fonction.

 

Remarque

Un nombre quelconque d’attributs d’annotation (attributs XML personnalisés) peut être appliqué à l’élément ReturnType (Function). 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 utilise un élément Function pour définir une fonction qui retourne le nombre d’années pendant laquelle un livre a été imprimé. Notez que le type de retour est spécifié par l’attribut Type d’un élément ReturnType (Function) .

 <Function Name="GetYearsInPrint">
   <ReturnType Type=="Edm.Int32">
   <Parameter Name="book" Type="BooksModel.Book" />
   <DefiningExpression>
    Year(CurrentDateTime()) - Year(cast(book.PublishedDate as DateTime))
   </DefiningExpression>
 </Function>

 

 

ReturnType (FunctionImport), élément (CSDL)

L’élément ReturnType (FunctionImport) dans le langage de définition de schéma conceptuel (CSDL) spécifie le type de retour d’une fonction définie dans un élément FunctionImport. Un type de retour de fonction peut également être spécifié avec un attribut ReturnType.

Les types de retour peuvent être n’importe quelle collection de type d’entité, type complexe ou EdmSimpleType,

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

Attributs applicables

Le tableau suivant décrit les attributs qui peuvent être appliqués à l’élément ReturnType (FunctionImport).

Nom de l’attribut Est obligatoire Valeur
Type Non Type retourné par la fonction. La valeur doit être une collection de ComplexType, EntityType ou EDMSimpleType.
EntitySet Non Si la fonction retourne une collection de types d’entités, la valeur de EntitySet doit être l’entité définie sur laquelle appartient la collection. Dans le cas contraire, l’attribut EntitySet ne doit pas être utilisé.

 

Remarque

Un nombre quelconque d’attributs d’annotation (attributs XML personnalisés) peut être appliqué à l’élément ReturnType (FunctionImport). 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 utilise une FunctionImport qui retourne des livres et des éditeurs. Notez que la fonction retourne deux jeux de résultats et, par conséquent, deux éléments ReturnType (FunctionImport) sont spécifiés.

 <FunctionImport Name="GetBooksAndPublishers">
   <ReturnType Type=="Collection(BooksModel.Book )" EntitySet=”Books”>
   <ReturnType Type=="Collection(BooksModel.Publisher)" EntitySet=”Publishers”>
 </FunctionImport>

 

 

Élément RowType (CSDL)

Un RowType élément dans le langage de définition de schéma conceptuel (CSDL) définit une structure sans nom comme paramètre ou type de retour pour une fonction définie dans le modèle conceptuel.

Un élément RowType peut être l’enfant des éléments suivants :

  • CollectionType ;
  • Paramètre
  • ReturnType (Function)

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

  • Propriété (une ou plusieurs)
  • É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 RowType. 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 une fonction définie par modèle qui utilise un élément CollectionType pour spécifier que la fonction retourne une collection de lignes (telles que spécifiées dans l'élément RowType).

 <Function Name="LastNamesAfter">
   <Parameter Name="someString" Type="Edm.String" />
   <ReturnType>
    <CollectionType>
      <RowType>
        <Property Name="FirstName" Type="Edm.String" Nullable="false" />
        <Property Name="LastName" Type="Edm.String" Nullable="false" />
      </RowType>
    </CollectionType>
   </ReturnType>
   <DefiningExpression>
             SELECT VALUE ROW(p.FirstName, p.LastName)
             FROM SchoolEntities.People AS p
             WHERE p.LastName &gt;= somestring
   </DefiningExpression>
 </Function>

Schema, élément (CSDL)

L’élément Schema est l’élément racine d’une définition de modèle conceptuel. Il contient des définitions pour les objets, fonctions et conteneurs qui composent un modèle conceptuel.

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

  • Using
  • EntityContainer
  • EntityType
  • EnumType
  • Association
  • ComplexType
  • Fonction

Un élément Schema peut contenir zéro ou un élément Annotation.

Remarque

L’élément Function et les éléments d’annotation ne sont autorisés que dans CSDL v2 et versions ultérieures.

 

L’élément Schema utilise l’attribut Namespace pour définir l’espace de noms pour le type d’entité, le type complexe et les objets d’association dans un modèle conceptuel. Dans un espace de noms, deux objets ne peuvent pas avoir le même nom. Les espaces de noms peuvent s’étendre sur plusieurs éléments de Schema et plusieurs fichiers .csdl.

Un espace de noms de modèle conceptuel est différent de l’espace de noms XML de l’élément Schema. Un espace de noms de modèle conceptuel (tel que défini par l’attribut Namespace) est un conteneur logique pour les types d’entités, les types complexes 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 (où AAAA et MM représentent respectivement une année et un mois) sont réservés à CSDL. 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 conceptuel. 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 Simple.Example.Model, le nom complet de EntityType est SimpleExampleModel.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 à celle de l’attribut Namespace dans l’élément SSDL 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 Simple.Example.Model et que la valeur de l’attribut Alias est Model, vous pouvez utiliser Model.Customer comme nom complet de EntityType.

 

Remarque

Un nombre quelconque d'attributs d'annotation (attributs XML personnalisés) peut être appliqué à l'élément Schema. 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 Schema qui contient un élément EntityContainer , deux éléments EntityType et un élément Association.

 <Schema xmlns="https://schemas.microsoft.com/ado/2009/11/edm"
      xmlns:cg="https://schemas.microsoft.com/ado/2009/11/codegeneration"
      xmlns:store="https://schemas.microsoft.com/ado/2009/11/edm/EntityStoreSchemaGenerator"
       Namespace="ExampleModel" Alias="Self">
         <EntityContainer Name="ExampleModelContainer">
           <EntitySet Name="Customers"
                      EntityType="ExampleModel.Customer" />
           <EntitySet Name="Orders" EntityType="ExampleModel.Order" />
           <AssociationSet
                       Name="CustomerOrder"
                       Association="ExampleModel.CustomerOrders">
             <End Role="Customer" EntitySet="Customers" />
             <End Role="Order" EntitySet="Orders" />
           </AssociationSet>
         </EntityContainer>
         <EntityType Name="Customer">
           <Key>
             <PropertyRef Name="CustomerId" />
           </Key>
           <Property Type="Int32" Name="CustomerId" Nullable="false" />
           <Property Type="String" Name="Name" Nullable="false" />
           <NavigationProperty
                    Name="Orders"
                    Relationship="ExampleModel.CustomerOrders"
                    FromRole="Customer" ToRole="Order" />
         </EntityType>
         <EntityType Name="Order">
           <Key>
             <PropertyRef Name="OrderId" />
           </Key>
           <Property Type="Int32" Name="OrderId" Nullable="false" />
           <Property Type="Int32" Name="ProductId" Nullable="false" />
           <Property Type="Int32" Name="Quantity" Nullable="false" />
           <NavigationProperty
                    Name="Customer"
                    Relationship="ExampleModel.CustomerOrders"
                    FromRole="Order" ToRole="Customer" />
           <Property Type="Int32" Name="CustomerId" Nullable="false" />
         </EntityType>
         <Association Name="CustomerOrders">
           <End Type="ExampleModel.Customer"
                Role="Customer" Multiplicity="1" />
           <End Type="ExampleModel.Order"
                Role="Order" Multiplicity="*" />
           <ReferentialConstraint>
             <Principal Role="Customer">
               <PropertyRef Name="CustomerId" />
             </Principal>
             <Dependent Role="Order">
               <PropertyRef Name="CustomerId" />
             </Dependent>
           </ReferentialConstraint>
         </Association>
       </Schema>

 

 

Élément TypeRef (CSDL)

L’élément TypeRef dans le langage de définition de schéma conceptuel (CSDL) fournit une référence à un type nommé existant. L’élément TypeRef peut être un enfant de l’élément CollectionType, utilisé pour spécifier qu’une fonction a une collection en tant que paramètre ou type de retour.

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

  • Documentation (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 TypeRef. Notez que les attributs DefaultValue, MaxLength, FixedLength, Precision, Scale, Unicode, et Collation ne s’appliquent qu’à EDMSimpleTypes.

Nom de l’attribut Est obligatoire Valeur
Type Non Nom du type référencé.
Nullable Non True (valeur par défaut) ou False selon que la propriété peut avoir ou non une valeur null.
[!NOTE]
> Dans CSDL v1, une propriété de type complexe doit avoir Nullable="False".
DefaultValue Non Valeur par défaut de la propriété.
MaxLength Non Longueur maximale de la valeur de propriété.
FixedLength Non True ou False selon que la valeur de propriété sera stockée sous forme de chaîne de longueur fixe.
Précision Non Précision de la valeur de propriété.
Mise à l’échelle Non Échelle de la valeur de propriété.
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).
Unicode Non True ou False selon que la valeur de propriété 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.

 

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 CSDL. Les noms qualifiés complets de deux attributs personnalisés quelconques ne peuvent pas être identiques.

 

Exemple

L’exemple suivant montre une fonction définie par modèle qui utilise l’élément TypeRef (en tant qu’enfant d’un élémentCollectionType) pour spécifier que la fonction accepte une collection de types d’entités Department.

 <Function Name="GetAvgBudget">
      <Parameter Name="Departments">
          <CollectionType>
             <TypeRef Type="SchoolModel.Department"/>
          </CollectionType>
           </Parameter>
       <ReturnType Type="Collection(Edm.Decimal)"/>
       <DefiningExpression>
             SELECT VALUE AVG(d.Budget) FROM Departments AS d
       </DefiningExpression>
 </Function>

 

 

Using, élément (CSDL)

L'élément Using en conceptual schema definition language (CSDL) importe le contenu d’un modèle conceptuel qui existe dans un autre espace de noms. En définissant la valeur de l’attribut Namespace, vous pouvez faire référence aux types d’entités, aux types complexes et aux types d’association définis dans un autre modèle conceptuel. Plus d’un élément Using peuvent être un enfant d’un élément Schema.

Remarque

L’élément Using dans CSDL ne fonctionne pas exactement comme une instructionusing dans un langage de programmation. En important un espace de noms avec une instructionusing dans un langage de programmation, vous n’affectez pas les objets dans l’espace de noms d’origine. Dans le langage CSDL, un espace de noms importé peut contenir un type d'entité dérivé d'un type d'entité figurant dans l'espace de noms d'origine. Cela peut affecter les jeux d'entités déclarés dans l'espace de noms d'origine.

 

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

  • Documentation (zéro ou un élément autorisé)
  • Éléments d'annotation (zéro, un ou plusieurs éléments autorisés)

Attributs applicables

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

Nom de l’attribut Est obligatoire Valeur
Espace de noms Oui Nom de l'espace de noms importé.
Alias Oui Identificateur utilisé à la place du nom de l'espace de noms. Bien que cet attribut soit obligatoire, il n'est pas nécessaire qu'il soit utilisé à la place du nom de l'espace de noms pour qualifier les noms d'objets.

 

Remarque

Un nombre quelconque d'attributs d'annotation (attributs XML personnalisés) peut être appliqué à l'élément using. 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 illustre l'élément Using utilisé pour importer un espace de noms défini ailleurs. Notez que l’espace de noms de l’élément Schema affiché est BooksModel. La propriété Address sur PublisherEntityType est un type complexe défini dans l’ExtendedBooksModelespace de noms (importé avec l’élément Using ).

 <Schema xmlns="https://schemas.microsoft.com/ado/2009/11/edm"
           xmlns:cg="https://schemas.microsoft.com/ado/2009/11/codegeneration"
           xmlns:store="https://schemas.microsoft.com/ado/2009/11/edm/EntityStoreSchemaGenerator"
           Namespace="BooksModel" Alias="Self">

     <Using Namespace="BooksModel.Extended" Alias="BMExt" />

 <EntityContainer Name="BooksContainer" >
       <EntitySet Name="Publishers" EntityType="BooksModel.Publisher" />
     </EntityContainer>

 <EntityType Name="Publisher">
       <Key>
         <PropertyRef Name="Id" />
       </Key>
       <Property Type="Int32" Name="Id" Nullable="false" />
       <Property Type="String" Name="Name" Nullable="false" />
       <Property Type="BMExt.Address" Name="Address" Nullable="false" />
     </EntityType>

 </Schema>

 

 

Attributs d'annotation (CSDL)

Les attributs d'annotation dans le langage CSDL (Conceptual Schema Definition Language) sont des attributs XML personnalisés dans le modèle conceptuel. En plus d'avoir une structure XML valide, les attributs d'annotation doivent satisfaire les critères suivants :

  • Les attributs d'annotation ne doivent pas figurer dans un espace de noms XML réservé pour le langage CSDL.
  • Plusieurs attributs d'annotation peuvent être appliqués à un élément CSDL donné.
  • Les noms qualifiés complets de deux attributs d'annotation ne doivent pas être identiques.

Les attributs d'annotation peuvent être utilisés pour fournir des métadonnées supplémentaires sur des éléments dans un modèle conceptuel. 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 attribut d’annotation (CustomAttribute). L'exemple fait également apparaître un élément d'annotation appliqué à l'élément de type d'entité.

 <Schema Namespace="SchoolModel" Alias="Self"
         xmlns:annotation="https://schemas.microsoft.com/ado/2009/02/edm/annotation"
         xmlns="https://schemas.microsoft.com/ado/2009/11/edm">
   <EntityContainer Name="SchoolEntities" annotation:LazyLoadingEnabled="true">
     <EntitySet Name="People" EntityType="SchoolModel.Person" />
   </EntityContainer>
   <EntityType Name="Person" xmlns:p="http://CustomNamespace.com"
               p:CustomAttribute="Data here.">
     <Key>
       <PropertyRef Name="PersonID" />
     </Key>
     <Property Name="PersonID" Type="Int32" Nullable="false"
               annotation:StoreGeneratedPattern="Identity" />
     <Property Name="LastName" Type="String" Nullable="false"
               MaxLength="50" Unicode="true" FixedLength="false" />
     <Property Name="FirstName" Type="String" Nullable="false"
               MaxLength="50" Unicode="true" FixedLength="false" />
     <Property Name="HireDate" Type="DateTime" />
     <Property Name="EnrollmentDate" Type="DateTime" />
     <p:CustomElement>
       Custom metadata.
     </p:CustomElement>
   </EntityType>
 </Schema>

 

Le code suivant récupère les métadonnées dans l'attribut d'annotation et les écrit dans la console :

 EdmItemCollection collection = new EdmItemCollection("School.csdl");
 MetadataWorkspace workspace = new MetadataWorkspace();
 workspace.RegisterItemCollection(collection);
 EdmType contentType;
 workspace.TryGetType("Person", "SchoolModel", DataSpace.CSpace, out contentType);
 if (contentType.MetadataProperties.Contains("http://CustomNamespace.com:CustomAttribute"))
 {
     MetadataProperty annotationProperty =
         contentType.MetadataProperties["http://CustomNamespace.com:CustomAttribute"];
     object annotationValue = annotationProperty.Value;
     Console.WriteLine(annotationValue.ToString());
 }

 

Le code ci-dessus suppose que le fichier School.csdl se trouve dans le répertoire de sortie du projet et que vous avez ajouté les instructions Imports et Using suivantes à votre projet :

 using System.Data.Metadata.Edm;

 

 

Éléments d'annotation (CSDL)

Les éléments d'annotation dans le langage CSDL (Conceptual Schema Definition Language) sont des éléments XML personnalisés dans le modèle conceptuel. En plus d'avoir une structure XML valide, les éléments d'annotation doivent satisfaire les critères suivants :

  • Les éléments d'annotation ne doivent pas figurer dans un espace de noms XML réservé pour le langage CSDL.
  • Plusieurs éléments d'annotation peuvent être des enfants d'un élément CSDL donné.
  • 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 CSDL donné.

Les éléments d'annotation permettent de fournir des métadonnées supplémentaires sur les éléments dans un modèle conceptuel. À 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 fait également apparaître un attribut d'annotation appliqué à l'élément de type d'entité.

 <Schema Namespace="SchoolModel" Alias="Self"
         xmlns:annotation="https://schemas.microsoft.com/ado/2009/02/edm/annotation"
         xmlns="https://schemas.microsoft.com/ado/2009/11/edm">
   <EntityContainer Name="SchoolEntities" annotation:LazyLoadingEnabled="true">
     <EntitySet Name="People" EntityType="SchoolModel.Person" />
   </EntityContainer>
   <EntityType Name="Person" xmlns:p="http://CustomNamespace.com"
               p:CustomAttribute="Data here.">
     <Key>
       <PropertyRef Name="PersonID" />
     </Key>
     <Property Name="PersonID" Type="Int32" Nullable="false"
               annotation:StoreGeneratedPattern="Identity" />
     <Property Name="LastName" Type="String" Nullable="false"
               MaxLength="50" Unicode="true" FixedLength="false" />
     <Property Name="FirstName" Type="String" Nullable="false"
               MaxLength="50" Unicode="true" FixedLength="false" />
     <Property Name="HireDate" Type="DateTime" />
     <Property Name="EnrollmentDate" Type="DateTime" />
     <p:CustomElement>
       Custom metadata.
     </p:CustomElement>
   </EntityType>
 </Schema>

 

Le code suivant récupère les métadonnées dans l'élément d'annotation et les écrit dans la console :

 EdmItemCollection collection = new EdmItemCollection("School.csdl");
 MetadataWorkspace workspace = new MetadataWorkspace();
 workspace.RegisterItemCollection(collection);
 EdmType contentType;
 workspace.TryGetType("Person", "SchoolModel", DataSpace.CSpace, out contentType);
 if (contentType.MetadataProperties.Contains("http://CustomNamespace.com:CustomElement"))
 {
     MetadataProperty annotationProperty =
         contentType.MetadataProperties["http://CustomNamespace.com:CustomElement"];
     object annotationValue = annotationProperty.Value;
     Console.WriteLine(annotationValue.ToString());
 }

 

Le code ci-dessus suppose que le fichier School.csdl se trouve dans le répertoire de sortie du projet et que vous avez ajouté les instructions Imports et Using suivantes à votre projet :

 using System.Data.Metadata.Edm;

 

 

Types de modèles conceptuels (CSDL)

Le langage CSDL (Conceptual Schema Definition Language) prend en charge un ensemble de types de données primitifs abstraits, appelés EDMSimpleTypes, qui définissent des propriétés dans un modèle conceptuel. EDMSimpleTypes sont des proxys pour les types de données primitifs pris en charge dans l’environnement de stockage ou d’hébergement.

Le tableau suivant répertorie les types de données primitifs pris en charge par CSDL. Le tableau répertorie également les facettes qui peuvent être appliquées à chaque EDMSimpleType.

EDMSimpleType Description Facettes applicables
Edm.Binary Contient des données binaires. MaxLength, FixedLength, Nullable, Default
Edm.Boolean Contient la valeur true ou false. Nullable, Default
Edm.Byte Contient une valeur d'entier 8 bits non signé. Precision, Nullable, Default
Edm.DateTime Représente une date et une heure. Precision, Nullable, Default
Edm.DateTimeOffset Contient une date et une heure en tant que décalage en minutes par rapport à l'heure GMT. Precision, Nullable, Default
Edm.Decimal Contient une valeur numérique avec une précision et une échelle fixes. Precision, Nullable, Default
Edm.Double Contient un nombre à virgule flottante avec une précision de 15 chiffres Precision, Nullable, Default
Edm.Float Contient un nombre à virgule flottante avec une précision de 7 chiffres. Precision, Nullable, Default
Edm.Guid Contient un identificateur unique de 16 octets. Precision, Nullable, Default
Edm.Int16 Contient une valeur d'entier 16 bits signé. Precision, Nullable, Default
Edm.Int32 Contient une valeur d'entier 32 bits signé. Precision, Nullable, Default
Edm.Int64 Contient une valeur d'entier 64 bits signé. Precision, Nullable, Default
Edm.SByte Contient une valeur d'entier 8 bits signé. Precision, Nullable, Default
Edm.String Contient des données caractères. Unicode, FixedLength, MaxLength, Collation, Precision, Nullable, Default
Edm.Time Contient une heure. Precision, Nullable, Default
Edm.Geography Nullable, Par défaut, SRID
Edm.GeographyPoint Nullable, Par défaut, SRID
Edm.GeographyLineString Nullable, Par défaut, SRID
Edm.GeographyPolygon Nullable, Par défaut, SRID
Edm.GeographyMultiPoint Nullable, Par défaut, SRID
Edm.GeographyMultiLineString Nullable, Par défaut, SRID
Edm.GeographyMultiPolygon Nullable, Par défaut, SRID
Edm.GeographyCollection Nullable, Par défaut, SRID
Edm.Geometry Nullable, Par défaut, SRID
Edm.GeometryPoint Nullable, Par défaut, SRID
Edm.GeometryLineString Nullable, Par défaut, SRID
Edm.GeometryPolygon Nullable, Par défaut, SRID
Edm.GeometryMultiPoint Nullable, Par défaut, SRID
Edm.GeometryMultiLineString Nullable, Par défaut, SRID
Edm.GeometryMultiPolygon Nullable, Par défaut, SRID
Edm.GeometryCollection Nullable, Par défaut, SRID

Facettes (CSDL)

Les facettes dans le langage CSDL (Conceptual Schema Definition Language) représentent des contraintes sur les propriétés de types d'entités et de types complexes. Les facettes apparaissent comme des attributs XML sur les éléments CSDL suivants :

  • Propriété
  • TypeRef
  • Paramètre

Le tableau ci-dessous décrit les facettes prises en charge dans le langage CSDL. Toutes les facettes sont facultatives. Certaines facettes répertoriées ci-dessous sont utilisées par Entity Framework lors de la génération d’une base de données à partir d’un modèle conceptuel.

Remarque

Pour plus d’informations sur les types de données dans un modèle conceptuel, consultez Types de modèles conceptuels (CSDL).

Facette Description S’applique à Utilisée pour la génération de base de données. Utilisée par le runtime.
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é. Edm.String Oui Non
ConcurrencyMode Indique que la valeur de la propriété doit être utilisée pour des contrôles d'accès concurrentiel optimiste. Toutes les propriétés EDMSimpleType Non Oui
Par défaut Spécifie la valeur par défaut de la propriété si aucune valeur n'est fournie en cas d'instanciation. Toutes les propriétés EDMSimpleType Oui Oui
FixedLength Spécifie si la longueur de la valeur de propriété peut varier. Edm.Binary, Edm.String Oui Non
MaxLength Spécifie la longueur maximale de la valeur de propriété. Edm.Binary, Edm.String Oui Non
Nullable Spécifie si la propriété peut avoir une valeur null. Toutes les propriétés EDMSimpleType Oui Oui
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 propriété. Edm.DateTime, Edm.DateTimeOffset, Edm.Decimal, Edm.Time Oui Non
Mise à l’échelle Spécifie le nombre de chiffres à droite de la virgule décimale pour la valeur de propriété. Edm.Decimal Oui Non
SRID Spécifie l’ID système de référence du système spatial. Pour plus d’informations, consultez SRID et SRID (SQL Server). Edm.Geography, Edm.GeographyPoint, Edm.GeographyLineString, Edm.GeographyPolygon, Edm.GeographyMultiPoint, Edm.GeographyMultiLineString, Edm.GeographyMultiPolygon, Edm.GeographyCollection, Edm.Geometry, Edm.GeometryPoint, Edm.GeometryLineString, Edm.GeometryPolygon, Edm.GeometryMultiPoint, Edm.GeometryMultiLineString, Edm.GeometryMultiPolygon, Edm.GeometryCollection Non Oui
Unicode Indique si la valeur de propriété est stockée au format Unicode. Edm.String Oui Oui

Remarque

Lors de la génération d’une base de données à partir d’un modèle conceptuel, l’Assistant Génération de base de données reconnaît la valeur de l’attribut StoreGeneratedPattern sur un élément Property s’il se trouve dans l’espace de noms suivant : https://schemas.microsoft.com/ado/2009/02/edm/annotation. Les valeurs prises en charge pour l’attribut sont Identity et Computed. Une valeur de Identity produit une colonne de base de données avec une valeur d’identité générée dans la base de données. Une valeur de Computed produit une colonne avec une valeur calculée dans la base de données.

Exemple

L'exemple suivant illustre l'application de facettes aux propriétés d'un type d'entité :

 <EntityType Name="Product">
   <Key>
     <PropertyRef Name="ProductId" />
   </Key>
   <Property Type="Int32"
             Name="ProductId" Nullable="false"
             a:StoreGeneratedPattern="Identity"
    xmlns:a="https://schemas.microsoft.com/ado/2009/02/edm/annotation" />
   <Property Type="String"
             Name="ProductName"
             Nullable="false"
             MaxLength="50" />
   <Property Type="String"
             Name="Location"
             Nullable="true"
             MaxLength="25" />
 </EntityType>