Inferenza delle relazioni (ADO.NET)
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à utilizzata 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. Utilizzando la nuova colonna nelle tabelle padre e figlio, verrà inoltre creato il tipo ForeignKeyConstraint con la proprietà DeleteRule impostata su 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 e 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.
Utilizzando 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
Vedere anche
Concetti
Caricamento di un DataSet da XML (ADO.NET)
Caricamento delle informazioni relative allo schema di un DataSet da XML (ADO.NET)
Annidamento di DataRelation (ADO.NET)
Altre risorse
Inferenza della struttura relazionale del DataSet da XML (ADO.NET)