Inferenza delle relazioni

Se a un elemento inferito come una tabella è associato un elemento a sua volta inferito come tabella, tra le due tabelle verrà creato un oggetto 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 di questa colonna di identità verrà impostata su MappingType.Hidden. La colonna sarà una chiave primaria ad incremento automatico per la tabella padre e verrà utilizzata per la DataRelation tra le due tabelle. Il tipo di dati della colonna di identità aggiunta sarà System.Int32, a differenza del tipo di dati di tutte le altre colonne inferite, che è System.String. Utilizzando la nuova colonna nelle tabelle padre e figlio, verrà inoltre creato il vincolo ForeignKeyConstraint con DeleteRule = Cascade.

Si consideri ad esempio il seguente elemento XML:

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

Due tabelle verranno prodotte dal processo di inferenza: "Element1" e "ChildElement1".

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

Nella tabella "ChildElement1" sono presenti tre colonne: "attr1", "attr2" e "Element1_Id". La proprietà ColumnMapping delle colonne "attr1" e "attr2" viene impostata su MappingType.Attribute. La proprietà ColumnMapping della colonna "Element1_Id" viene impostata su MappingType.Hidden.

Utilizzando le colonne "Element1_Id" di entrambe le tabelle vengono 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

Vedere anche

Inferenza della struttura relazionale del DataSet da XML | Caricamento di un DataSet da XML | Caricamento delle informazioni relative allo schema di un DataSet da XML | Oggetti DataRelation nidificati | XML e il DataSet | Creazione e utilizzo di DataSet