リレーションシップの推論 (ADO.NET)

テーブルとして推論される要素に、同じくテーブルとして推論される子の要素が含まれている場合には、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 テーブルには、attr1attr2、および 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 の読み込み (ADO.NET)

XML の DataSet スキーマ情報の読み込み (ADO.NET)

DataRelation の入れ子化 (ADO.NET)

その他の技術情報

XML からの DataSet リレーショナル構造の推論 (ADO.NET)

DataSet での XML の使用 (ADO.NET)

DataSets、DataTables、および DataViews (ADO.NET)