Mappage des relations implicites existant entre des éléments imbriqués d'un schéma
Un schéma en langage XSD (XML Schema Definition) peut présenter des types complexes imbriqués les uns dans les autres. Dans ce cas, le processus de mappage applique le mappage par défaut et crée les différents éléments suivants dans le DataSet :
- Une table pour chacun des types complexes (parent et enfant).
- Si aucune contrainte unique n'est définie pour le parent, chaque définition de table comprend une colonne clé primaire supplémentaire nommée sur le modèle NomTable_Id, où NomTable est le nom de la table parente.
- Une contrainte de clé primaire sur la table parente, identifiant la colonne supplémentaire en tant que clé primaire (via l'assignation de la valeur True à la propriété IsPrimaryKey). La contrainte est nommée selon le modèle Constraint*#*, où # est 1, 2, 3, etc. Par exemple, le nom par défaut de la première contrainte est Constraint1.
- Une contrainte de clé étrangère sur la table enfant, qui identifie la colonne supplémentaire en tant que clé étrangère faisant référence à la clé primaire de la table parente. La contrainte est nommée sur le modèle TableParente_TableEnfant, où TableParente est le nom de la table parente et TableEnfant celui de la table enfant.
- Une relation de données entre les tables parente et enfant.
L'exemple suivant représente un schéma où OrderDetail est un élément enfant de 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="Order">
<xs:complexType>
<xs:sequence>
<xs:element name="OrderNumber" type="xs:string" />
<xs:element name="EmpNumber" type="xs:string" />
<xs:element name="OrderDetail">
<xs:complexType>
<xs:sequence>
<xs:element name="OrderNo" type="xs:string" />
<xs:element name="ItemNo" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:choice>
</xs:complexType>
</xs:element>
</xs:schema>
Le processus de mappage du schéma XSD crée les éléments suivants dans le **DataSet **:
Les tables Order et OrderDetail.
Order(OrderNumber, EmpNumber, Order_Id) OrderDetail(OrderNo, ItemNo, Order_Id)
Une contrainte unique sur la table Order. Notez que la propriété IsPrimaryKey a la valeur True.
ConstraintName: Constraint1 Type: UniqueConstraint Table: Order Columns: Order_Id IsPrimaryKey: True
Une contrainte de clé étrangère sur la table OrderDetail.
ConstraintName: Order_OrderDetail Type: ForeignKeyConstraint Table: OrderDetail Columns: Order_Id RelatedTable: Order RelatedColumns: Order_Id
Une relation entre les tables Order et OrderDetail. La propriété Nested de cette relation a la valeur True, car les éléments Order et OrderDetail sont imbriqués dans le schéma.
ParentTable: Order ParentColumns: Order_Id ChildTable: OrderDetail ChildColumns: Order_Id ParentKeyConstraint: Constraint1 ChildKeyConstraint: Order_OrderDetail RelationName: Order_OrderDetail Nested: True
Voir aussi
Génération des relations d'un DataSet à partir de XSD | Mappage de contraintes XSD à des contraintes de DataSet | Prise en charge des types de données entre des types XSD et des types .NET Framework