推断关系 (ADO.NET)

如果被推断为表的元素具有一个同样被推断为表的子元素,则将在这两个表之间创建 DataRelation。 一个名为 ParentTableName_Id 的新列将添加到为父元素创建的表以及为子元素创建的表中。 此标识列的 ColumnMapping 属性将设置为 MappingType.Hidden。 该列将成为父表的自动递增主键,并将用于两个表之间的 DataRelation。 所添加的标识列的数据类型将为 System.Int32,与所有其他被推断的列的数据类型不同,后者的数据类型为 System.StringDeleteRule = CascadeForeignKeyConstraint 也将使用父表和子表中的新列创建。

例如,考虑以下 XML:

<DocumentElement>
  <Element1>
    <ChildElement1 attr1="value1" attr2="value2"/>
    <ChildElement2>Text2</ChildElement2>
  </Element1>
</DocumentElement>

推理过程将生成两个表:Element1ChildElement1

Element1 表具有两个列:Element1_IdChildElement2Element1_Id 列的 ColumnMapping 属性将设置为 MappingType.HiddenChildElement2 列的 ColumnMapping 属性将设置为 MappingType.ElementElement1_Id 列将设置为 Element1 表的主键。

ChildElement1 表具有三个列:attr1attr2Element1_Idattr1attr2 列的 ColumnMapping 属性将设置为 MappingType.AttributeElement1_Id 列的 ColumnMapping 属性将设置为 MappingType.Hidden

DataRelationForeignKeyConstraint 将使用两个表中的 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

请参见

概念

从 XML 中加载数据集 (ADO.NET)

从 XML 中加载数据集架构信息 (ADO.NET)

嵌套 DataRelation (ADO.NET)

其他资源

从 XML 推断数据集关系结构 (ADO.NET)

在数据集中使用 XML (ADO.NET)

DataSet、DataTable 和 DataView (ADO.NET)