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