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

Voir aussi