Partager via


Mappage de contraintes XSD uniques à des contraintes de DataSet

Dans un schéma en langage XSD (XML Schema Definition), l'élément unique spécifie la contrainte unique sur un élément ou un attribut. Dans le processus de conversion d'un schéma XML en schéma relationnel (DataSet), la contrainte unique spécifiée sur un élément ou un attribut du schéma XML est mappée à une contrainte unique dans le DataTable du DataSet correspondant qui est généré.

Le tableau suivant présente les attributs msdata que vous pouvez spécifier dans l'élément unique.

Nom de l'attribut Description
msdata:ConstraintName Si cet attribut est spécifié, sa valeur est utilisée comme nom de la contrainte. Sinon, le nom de la contrainte est fourni par l'attribut name.
msdata:PrimaryKey Si PrimaryKey="true" figure dans l'élément unique, une contrainte unique est créée avec la propriété IsPrimaryKey ayant pour valeur true.

L'exemple suivant représente un schéma XML qui utilise l'élément unique pour spécifier une contrainte unique.

<xs:schema id="SampleDataSet" 
            xmlns:xs="http://www.w3.org/2001/XMLSchema" 
            xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
  <xs:element name="Customers">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="CustomerID" type="xs:integer" minOccurs="0" />
        <xs:element name="CompanyName" type="xs:string" minOccurs="0" />
       <xs:element name="Phone" type="xs:string" />
     </xs:sequence>
   </xs:complexType>
 </xs:element>

 <xs:element name="SampleDataSet" msdata:IsDataSet="true">
  <xs:complexType>
    <xs:choice maxOccurs="unbounded">
      <xs:element ref="Customers" />
    </xs:choice>
  </xs:complexType>
   <xs:unique              msdata:ConstraintName="UCustID"             name="UniqueCustIDConstr" >     <xs:selector xpath=".//Customers" />     <xs:field xpath="CustomerID" />   </xs:unique>
 </xs:element>
</xs:schema>

L'élément unique du schéma spécifie que la valeur de l'élément enfant CustomerID doit être unique pour tous les éléments Customers d'une instance du document. Lors de la génération du DataSet, le processus de mappage lit ce schéma et crée la table suivante :

Customers (CustomerID, CompanyName, Phone)

Le processus de mappage crée aussi une contrainte unique sur la colonne CustomerID, comme le montre le DataSet suivant. (Par souci de simplicité, seules les propriétés pertinentes sont représentées.)

DataSetName: MyDataSet
TableName: Customers
  ColumnName: CustomerID
      AllowDBNull: True
      Unique: True
  ConstraintName: UcustID      Type: UniqueConstraint
      Table: Customers
      Columns: CustomerID 
      IsPrimaryKey: False

Dans le DataSet généré, la propriété IsPrimaryKey a la valeur False pour la contrainte unique. La propriété unique sur la colonne indique que les valeurs de la colonne CustomerID doivent être uniques (mais elles peuvent être une référence null, comme spécifié par la propriété AllowDBNull de la colonne).

Si vous modifiez le schéma et spécifiez l'attribut facultatif msdata:PrimaryKey de l'élément unique en lui assignant la valeur True, la contrainte unique est créée sur la table. La propriété AllowDBNull de la colonne a la valeur False et la propriété IsPrimaryKey de la contrainte a la valeur True, faisant ainsi de la colonne CustomerID une colonne clé primaire.

Vous pouvez spécifier une contrainte unique sur une combinaison d'éléments ou d'attribut dans le schéma XML. L'exemple suivant montre comment spécifier qu'une combinaison des valeurs de CustomerID et de CompanyName doit être unique pour tous les Customers d'une instance, en ajoutant un autre élément xs:field au schéma.

   <xs:unique  
            msdata:ConstraintName="SomeName" 
            name="UniqueCustIDConstr" >
     <xs:selector xpath=".//Customers" />
     <xs:field xpath="CustomerID" />
     <xs:field xpath="CompanyName" />
   </xs:unique>

Le code suivant illustre la contrainte créée dans le DataSet obtenu.

ConstraintName: SomeName
  Table: Customers
  Columns: CustomerID CompanyName 
  IsPrimaryKey: False

Voir aussi

Mappage de contraintes XSD à des contraintes de DataSet | Génération des relations d'un DataSet à partir de XSD | Prise en charge des types de données entre des types XSD et des types .NET Framework