Inferring Relationships
If an element that is inferred as a table has a child element that is also inferred as a table, a DataRelation will be created between the two tables. A new column with a name of ParentTableName_Id will be added to both the table created for the parent element, and the table created for the child element. The ColumnMapping property of this identity column will be set to MappingType.Hidden. The column will be an auto-incrementing primary key for the parent table, and will be used for the DataRelation between the two tables. The data type of the added identity column will be System.Int32, unlike the data type of all other inferred columns, which is System.String. A ForeignKeyConstraint with DeleteRule = Cascade will also be created using the new column in both the parent and child tables.
For example, consider the following XML:
<DocumentElement>
<Element1>
<ChildElement1 attr1="value1" attr2="value2"/>
<ChildElement2>Text2</ChildElement2>
</Element1>
</DocumentElement>
The inference process will produce two tables: Element1 and ChildElement1.
The Element1 table will have two columns: Element1_Id and ChildElement2. The ColumnMapping property of the Element1_Id column will be set to MappingType.Hidden. The ColumnMapping property of the ChildElement2 column will be set to MappingType.Element. The Element1_Id column will be set as the primary key of the Element1 table.
The ChildElement1 table will have three columns: attr1, attr2 and Element1_Id. The ColumnMapping property for the attr1 and attr2 columns will be set to MappingType.Attribute. The ColumnMapping property of the Element1_Id column will be set to MappingType.Hidden.
A DataRelation and ForeignKeyConstraint will be created using the Element1_Id columns from both tables.
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