Partilhar via


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

Consulte também