Inférence des relations
Si un élément déduit en tant que table comporte un élément enfant également déduit en tant que table, un DataRelation sera créé entre les deux tables. Une nouvelle colonne, nommée « NomTableParent_ID » sera ajoutée aux deux tables ; celle qui a été créée pour l'élément parent, et celle qui l'a été pour l'élément enfant. La propriété ColumnMapping de cette colonne d'identité aura pour valeur MappingType.Hidden. La colonne constituera une clé primaire auto-incrémentée pour la table parente et sera utilisée pour le DataRelation entre les deux tables. Le type de données de la colonne d'identité ajoutée sera System.Int32, à la différence de celui de toutes les autres colonnes déduites qui est System.String. Un ForeignKeyConstraint avec la valeur DeleteRule = Cascade sera également créé à l'aide de la nouvelle colonne dans les tables parente et enfant.
Examinons, par exemple, le code XML suivant :
<DocumentElement>
<Element1>
<ChildElement1 attr1="value1" attr2="value2"/>
<ChildElement2>Text2</ChildElement2>
</Element1>
</DocumentElement>
Le processus d'inférence produira deux tables : « Element1 » et « ChildElement1 ».
La table « Element1 » comprendra deux colonnes : « Element1_Id » et « ChildElement2 ». La propriété ColumnMapping de la colonne « Element1_Id » aura pour valeur MappingType.Hidden. La propriété ColumnMapping de la colonne « ChildElement2 » aura pour valeur MappingType.Element. La colonne « Element1_Id » sera définie comme la clé primaire de la table « Element1 ».
La table « ChildElement1 » comprendra trois colonnes : « attr1 », « attr2 » et « Element1_Id ». La propriété ColumnMapping des colonnes « attr1 » et « attr2 » aura pour valeur MappingType.Attribute. La propriété ColumnMapping de la colonne « Element1_Id » aura pour valeur MappingType.Hidden.
Un DataRelation et un ForeignKeyConstraint seront créés à l'aide des colonnes « Element1_Id » des deux tables.
DataSet : DocumentElement
Table : Element1
Element1_Id | ChildElement2 |
---|---|
0 | Text2 |
Table : ChildElement1
attr1 | attr2 | Element1_Id |
---|---|---|
value1 | value2 | 0 |
DataRelation : Element1_ChildElement1
ParentTable : Element1
ParentColumn : Element1_Id
ChildTable : ChildElement1
ChildColumn : Element1_Id
Nested : True
ForeignKeyConstraint : Element1_ChildElement1
Column : Element1_Id
ParentTable : Element1
ChildTable : ChildElement1
DeleteRule : Cascade
AcceptRejectRule : None
Voir aussi
Inférence de la structure relationnelle d'un DataSet à partir de XML | Chargement d'un DataSet à partir de XML | Chargement des informations de schéma d'un DataSet à partir de XML | DataRelations imbriqués | XML et le DataSet | Création et utilisation de DataSets