テーブルとして推論される要素に、テーブルとしても推論される子要素がある場合、2 つのテーブル間に DataRelation が作成されます。 ParentTableName_Idという名前の新しい列が、親要素用に作成されたテーブルと子要素用に作成されたテーブルの両方に追加されます。 この ID 列の ColumnMapping プロパティは MappingType.Hidden に設定されます。 列は親テーブルの自動インクリメント主キーになり、2 つのテーブル間の DataRelation に使用されます。 追加された ID 列のデータ型は 、System.String である他のすべての推論列のデータ型とは異なり、 System.Int32 になります。 ForeignKeyConstraint = を含むも、親テーブルと子テーブルの両方の新しい列を使用して作成されます。
たとえば、次の XML を考えてみましょう。
<DocumentElement>
<Element1>
<ChildElement1 attr1="value1" attr2="value2"/>
<ChildElement2>Text2</ChildElement2>
</Element1>
</DocumentElement>
推論プロセスでは、 Element1 と ChildElement1 の 2 つのテーブルが生成されます。
Element1 テーブルには、Element1_Id と ChildElement2 の 2 つの列があります。 Element1_Id列の ColumnMapping プロパティは MappingType.Hidden に設定されます。 ChildElement2 列の ColumnMapping プロパティは MappingType.Element に設定されます。 Element1_Id列は、Element1 テーブルの主キーとして設定されます。
ChildElement1 テーブルには、attr1、attr2、 Element1_Idの 3 つの列があります。 attr1 列と attr2 列の ColumnMapping プロパティは MappingType.Attribute に設定されます。 Element1_Id列の ColumnMapping プロパティは MappingType.Hidden に設定されます。
DataRelation と ForeignKeyConstraint は、両方のテーブルのElement1_Id列を使用して作成されます。
データセット: DocumentElement
テーブル: Element1
Element1_Id | ChildElement2 |
---|---|
0 | テキスト2 |
テーブル: ChildElement1
attr1 | attr2 | Element1_Id |
---|---|---|
value1 | value2 | 0 |
DataRelation: Element1_ChildElement1
ParentTable: Element1
ParentColumn: Element1_Id
ChildTable: ChildElement1
子列: Element1_Id
ネスト: 正しい
ForeignKeyConstraint: Element1_ChildElement1
コラム: Element1_Id
ParentTable: Element1
ChildTable: ChildElement1
DeleteRule: カスケード
AcceptRejectRule: 何一つ