Déduction 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 objet DataRelation sera créé entre les deux tables. Une nouvelle colonne, nommée ParentTableName_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 du type de données de toutes les autres colonnes déduites, qui est System.String. Un objet ForeignKeyConstraint avec 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 aura 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 clé primaire de la table Element1.
La table ChildElement1 aura 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 |
---|---|---|
valeur1 | valeur2 | 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