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