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