推断关系

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

请参阅