如果被推断为表的元素具有也推断为表的子元素,则会在两个表之间创建一个 DataRelation 子元素。 将向为父元素创建的表以及为子元素创建的表添加一个名称 为ParentTableName_Id 的新列。 此标识列的 ColumnMapping 属性将设置为 MappingType.Hidden。 该列将是父表的自动递增主键,将用于两个表之间的 DataRelation 。 添加的标识列的数据类型将是 System.Int32,这与所有其他推断列( 即 System.String)的数据类型不同。 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。
将使用两个表中的Element1_Id列创建DataRelation和ForeignKeyConstraint。
数据集: DocumentElement
表格: 元素1
Element1_Id | ChildElement2 |
---|---|
0 | Text2 |
表格: ChildElement1
attr1 | attr2 | Element1_Id |
---|---|---|
value1 | value2 | 0 |
DataRelation: Element1_ChildElement1
ParentTable: Element1
ParentColumn: Element1_Id
ChildTable: ChildElement1
ChildColumn: Element1_Id
嵌套: True
ForeignKeyConstraint: Element1_ChildElement1
Column: Element1_Id
ParentTable: Element1
ChildTable: ChildElement1
DeleteRule: Cascade
AcceptRejectRule: 没有