Condividi tramite


Deduzione di relazioni

Se a un elemento inferito come tabella è associato un elemento figlio a sua volta inferito come tabella, tra le due tabelle verrà creato un tipo DataRelation. Una nuova colonna denominata ParentTableName_Id verrà aggiunta alla tabella creata per l'elemento padre e alla tabella creata per l'elemento figlio. La proprietà ColumnMapping della colonna Identity verrà impostata su MappingType.Hidden. La colonna sarà una chiave primaria con incremento automatico per la tabella padre e verrà usata per la DataRelation tra le due tabelle. Il tipo di dati della colonna Identity aggiunta sarà System.Int32, a differenza del tipo di dati di tutte le altre colonne inferite, che è System.String. Usando la nuova colonna nelle tabelle padre e figlio, verrà creato anche il tipo ForeignKeyConstraint con la proprietà DeleteRule = Cascade.

Ad esempio, si consideri il seguente codice XML:

<DocumentElement>  
  <Element1>  
    <ChildElement1 attr1="value1" attr2="value2"/>  
    <ChildElement2>Text2</ChildElement2>  
  </Element1>  
</DocumentElement>  

Dal processo di inferenza verranno prodotte due tabelle: Element1 e ChildElement1.

Nella tabella Element1 saranno presenti due colonne: Element1_Id e ChildElement2. La proprietà ColumnMapping della colonna Element1_Id verrà impostata su MappingType.Hidden. La proprietà ColumnMapping della colonna ChildElement2 verrà impostata su MappingType.Element. La colonna Element1_Id verrà impostata come chiave primaria della tabella Element1.

Nella tabella ChildElement1 saranno presenti tre colonne: attr1, attr2 ed Element1_Id. La proprietà ColumnMapping per le colonne attr1 e attr2 verrà impostata su MappingType.Attribute. La proprietà ColumnMapping della colonna Element1_Id verrà impostata su MappingType.Hidden.

Usando le colonne Element1_Id di entrambe le tabelle verranno creati un oggetto DataRelation e un vincolo ForeignKeyConstraint.

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

Vedi anche