推断关系
如果被推断为表的元素具有一个同样被推断为表的子元素,则将在这两个表之间创建 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 列来创建。
数据集:DocumentElement
表:Element1
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
Nested:True
ForeignKeyConstraint:Element1_ChildElement1
Column:Element1_Id
ParentTable:Element1
ChildTable:ChildElement1
DeleteRule:Cascade
AcceptRejectRule:None