Condividi tramite


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)

Utilizzo di XML in un DataSet (ADO.NET)

DataSet, DataTable e DataView (ADO.NET)