Partager via


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