Partager via


Déduction des relations

Si un élément déduit comme une table a un élément enfant qui est également déduit comme une table, un DataRelation sera créé entre les deux tables. Une nouvelle colonne portant un nom sera ParentTableName_Id ajoutée à la fois à la table créée pour l’élément parent et à la table créée pour l’élément enfant. La ColumnMapping propriété de cette colonne d’identité est définie sur MappingType.Hidden. La colonne sera 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 est System.Int32, contrairement au type de données de toutes les autres colonnes déduites, qui est System.String. Une ForeignKeyConstraint avec DeleteRule = Cascade sera également créée à l’aide de la nouvelle colonne dans les tables parent et enfant.

Par exemple, considérez le code XML suivant :

<DocumentElement>
  <Element1>
    <ChildElement1 attr1="value1" attr2="value2"/>
    <ChildElement2>Text2</ChildElement2>
  </Element1>
</DocumentElement>

Le processus d’inférence produit deux tables : Element1 et ChildElement1.

La table Element1 comporte deux colonnes : Element1_Id et ChildElement2. La ColumnMapping propriété de la colonne Element1_Id est définie sur MappingType.Hidden. La ColumnMapping propriété de la colonne ChildElement2 est définie sur MappingType.Element. La colonne Element1_Id sera définie comme clé primaire de la table Element1 .

La table ChildElement1 comporte trois colonnes : attr1, attr2 et Element1_Id. La ColumnMapping propriété des colonnes attr1 et attr2 est définie sur MappingType.Attribute. La ColumnMapping propriété de la colonne Element1_Id est définie sur MappingType.Hidden.

A DataRelation et ForeignKeyConstraint seront créés à l’aide des colonnes Element1_Id des deux tables.

Jeu de données: DocumentElement

Table: Élément1

Element1_Id ChildElement2
0 Texte2

Table: ChildElement1

attr1 attr2 Element1_Id
valeur1 valeur2 0

DataRelation : Element1_ChildElement1

ParentTable : Élément1

ParentColumn : Element1_Id

ChildTable : ChildElement1

ChildColumn : Element1_Id

Nested : True

ForeignKeyConstraint : Element1_ChildElement1

Colonne: Element1_Id

ParentTable : Élément1

ChildTable : ChildElement1

DeleteRule : Cascade

AcceptRejectRule : Aucun

Voir aussi