Mappage de contraintes de référence à une clé XSD à des contraintes de DataSet
L'élément keyref vous permet d'établir des liens entre différents éléments figurant dans un document. Le résultat est similaire à une relation de clé étrangère dans une base de données relationnelle. Si un schéma spécifie l'élément keyref, au cours du processus de mappage du schéma, la conversion de cet élément donne la contrainte de clé étrangère correspondante sur les colonnes des tables du DataSet. Par défaut, l'élément keyref génère aussi une relation, avec les propriétés ParentTable, ChildTable, ParentColumn et ChildColumn spécifiées pour la relation.
Le tableau suivant présente les attributs msdata que vous pouvez spécifier dans l'élément keyref.
Nom de l'attribut | Description |
---|---|
msdata:ConstraintOnly | Si ConstraintOnly="true" est spécifié sur l'élément keyref du schéma, une contrainte est créée, mais aucune relation ne l'est. Si cet attribut n'est pas spécifié (ou s'il a la valeur False), la contrainte et la relation sont toutes deux créées dans le DataSet. |
msdata:ConstraintName | Si l'attribut ConstraintName est spécifié, sa valeur est utilisée comme nom de la contrainte. Sinon, l'attribut name de l'élément keyref du schéma fournit le nom de la contrainte dans le DataSet. |
msdata:UpdateRule | Si l'attribut UpdateRule est spécifié dans l'élément keyref du schéma, sa valeur est assignée à la propriété UpdateRule de la contrainte dans le DataSet. Sinon, la propriété UpdateRule a la valeur Cascade. |
msdata:DeleteRule | Si l'attribut DeleteRule est spécifié dans l'élément keyref du schéma, sa valeur est assignée à la propriété DeleteRule de la contrainte dans le DataSet. Sinon, la propriété DeleteRule a la valeur Cascade. |
msdata:AcceptRejectRule | Si l'attribut AcceptRejectRule est spécifié dans l'élément keyref du schéma, sa valeur est assignée à la propriété AcceptRejectRule de la contrainte dans le DataSet. Sinon, la propriété AcceptRejectRule a la valeur None. |
L'exemple suivant contient un schéma qui spécifie les relations key et keyref entre l'élément enfant OrderNumber de l'élément Order et l'élément enfant OrderNo de l'élément OrderDetail.
Dans cet exemple, l'élément enfant OrderNumber de l'élément OrderDetail fait référence à l'élément enfant clé OrderNo de l'élément Order.
<xs:schema id="MyDataSet"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xs:element name="MyDataSet" msdata:IsDataSet="true">
<xs:complexType>
<xs:choice maxOccurs="unbounded">
<xs:element name="OrderDetail">
<xs:complexType>
<xs:sequence>
<xs:element name="OrderNo" type="xs:integer" />
<xs:element name="ItemNo" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="Order">
<xs:complexType>
<xs:sequence>
<xs:element name="OrderNumber" type="xs:integer" />
<xs:element name="EmpNumber" type="xs:integer" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:choice>
</xs:complexType>
<xs:key name="OrderNumberKey" > <xs:selector xpath=".//Order" /> <xs:field xpath="OrderNumber" /> </xs:key> <xs:keyref name="OrderNoRef" refer="OrderNumberKey"> <xs:selector xpath=".//OrderDetail" /> <xs:field xpath="OrderNo" /> </xs:keyref>
</xs:element>
</xs:schema>
Le processus de mappage du schéma en langage XSD (XML Schema Definition) produit le DataSet suivant, qui comporte deux tables :
OrderDetail(OrderNo, ItemNo) and
Order(OrderNumber, EmpNumber)
En outre, le DataSet définit les contraintes suivantes :
Une contrainte unique sur la table Order.
Table: Order Columns: OrderNumber ConstraintName: OrderNumberKey Type: UniqueConstraint IsPrimaryKey: False
Une relation entre les tables Order et OrderDetail. La propriété Nested a la valeur False, car les deux éléments ne sont pas imbriqués dans le schéma.
ParentTable: Order ParentColumns: OrderNumber ChildTable: OrderDetail ChildColumns: OrderNo ParentKeyConstraint: OrderNumberKey ChildKeyConstraint: OrderNoRef RelationName: OrderNoRef Nested: False
Une contrainte de clé étrangère sur la table OrderDetail.
ConstraintName: OrderNoRef Type: ForeignKeyConstraint Table: OrderDetail Columns: OrderNo RelatedTable: Order RelatedColumns: OrderNumber
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