次の方法で共有


リレーションシップの推論

テーブルとして推論される要素に、同じくテーブルとして推論される子の要素が含まれている場合には、2 つのテーブル間に DataRelation が作成されます。この場合、"ParentTableName_Id" という名前の新しい列が、親の要素に対して作成されたテーブルと、子の要素に対して作成されたテーブルの両方に追加されます。この ID 列の ColumnMapping プロパティは、MappingType.Hidden に設定されます。この列が、親テーブルの自動的にインクリメントされる主キーとなり、2 つのテーブル間の DataRelation で使用されます。推論される他のすべての列のデータ型は System.String になりますが、追加される ID 列のデータ型は System.Int32 になります。親のテーブルおよび子のテーブルの両方に追加されたこの新しい列を使用して、DeleteRule = Cascade である 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 に設定されます。

2 つのテーブルの "Element1_Id" 列を使用して、DataRelation および ForeignKeyConstraint が作成されます。

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

参照

XML からの DataSet リレーショナル構造の推論 | XML からの DataSet の読み込み | XML の DataSet スキーマ情報の読み込み | 入れ子の DataRelation | XML と DataSet | DataSet の作成および使用