リレーションシップの推論 (ADO.NET)
更新 : November 2007
テーブルとして推論される要素に、同じくテーブルとして推論される子の要素が含まれている場合には、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 の読み込み (ADO.NET)
XML の DataSet スキーマ情報の読み込み (ADO.NET)