推断关系 (ADO.NET)

更新:November 2007

如果被推断为表的元素具有一个同样被推断为表的子元素,则将在这两个表之间创建 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)