Inferindo relações
Se um elemento que é inferido como uma tabela tem um elemento filho que também é inferido como uma tabela, um será criado entre DataRelation as duas tabelas. Uma nova coluna com um nome de ParentTableName_Id será adicionada à tabela criada para o elemento pai e à tabela criada para o elemento filho. A propriedade ColumnMapping desta coluna de identidade será definida como MappingType.Hidden. A coluna será uma chave primária de incremento automático para a tabela pai e será usada para DataRelation entre as duas tabelas. O tipo de dados da coluna de identidade adicionada será System.Int32, ao contrário do tipo de dados de todas as outras colunas inferidas, que é System.String. A ForeignKeyConstraint com DeleteRule = Cascade também será criada usando a nova coluna nas tabelas pai e filho.
Por exemplo, considere o seguinte XML:
<DocumentElement>
<Element1>
<ChildElement1 attr1="value1" attr2="value2"/>
<ChildElement2>Text2</ChildElement2>
</Element1>
</DocumentElement>
O processo de inferência produzirá duas tabelas: Element1 e ChildElement1.
A tabela Element1 terá duas colunas: Element1_Id e ChildElement2. A propriedade ColumnMapping da coluna Element1_Id será definida como MappingType.Hidden. A propriedade ColumnMapping da coluna ChildElement2 será definida como MappingType.Element. A coluna Element1_Id será definida como a chave primária da tabela Element1 .
A tabela ChildElement1 terá três colunas: attr1, attr2 e Element1_Id. A propriedade ColumnMapping para as colunas attr1 e attr2 será definida como MappingType.Attribute. A propriedade ColumnMapping da coluna Element1_Id será definida como MappingType.Hidden.
Um DataRelation e ForeignKeyConstraint serão criados usando as colunas Element1_Id de ambas as tabelas.
DataSet: DocumentElement
Tabela: Element1
Element1_Id | ChildElement2 |
---|---|
0 | Texto2 |
Tabela: ChildElement1
ATTR1 | ATTR2 | Element1_Id |
---|---|---|
valor1 | valor2 | 0 |
DataRelation: Element1_ChildElement1
ParentTable: Elemento1
ParentColumn: Element1_Id
ChildTable: ChildElement1
ChildColumn: Element1_Id
Aninhado: Verdadeiro
ForeignKeyConstraint: Element1_ChildElement1
Coluna: Element1_Id
ParentTable: Elemento1
ChildTable: ChildElement1
DeleteRule: Cascata
AcceptRejectRule: Nenhum