更新:November 2007
如果被推断为表的元素具有一个同样被推断为表的子元素,则将在这两个表之间创建 DataRelation。 一个名为 ParentTableName_Id 的新列将添加到为父元素创建的表以及为子元素创建的表中。 此标识列的 ColumnMapping 属性将设置为 MappingType.Hidden。 该列将成为父表的自动递增主键,并将用于两个表之间的 DataRelation。 所添加的标识列的数据类型将为 System.Int32,与所有其他被推断的列的数据类型不同,后者的数据类型为 System.String。 DeleteRule = Cascade 的 ForeignKeyConstraint 也将使用父表和子表中的新列创建。
例如,考虑以下 XML:
<DocumentElement>
  <Element1>
    <ChildElement1 attr1="value1" attr2="value2"/>
    <ChildElement2>Text2</ChildElement2>
  </Element1>
</DocumentElement>
推理过程将生成两个表: Element1 和 ChildElement1。
Element1 表具有两个列: Element1_Id 和 ChildElement2。Element1_Id 列的 ColumnMapping 属性将设置为 MappingType.Hidden。 ChildElement2 列的 ColumnMapping 属性将设置为 MappingType.Element。 Element1_Id 列将设置为 Element1 表的主键。
ChildElement1 表具有三个列: attr1、attr2 和 Element1_Id。attr1 和 attr2 列的 ColumnMapping 属性将设置为 MappingType.Attribute。 Element1_Id 列的 ColumnMapping 属性将设置为 MappingType.Hidden。
DataRelation 和 ForeignKeyConstraint 将使用两个表中的 Element1_Id 列来创建。
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