Ableiten von Beziehungen

Wenn ein als Tabelle hergeleitetes Element ein ebenfalls als Tabelle hergeleitetes untergeordnetes Element aufweist, wird zwischen den beiden Tabellen eine DataRelation erstellt. Eine neue Spalte mit dem Namen ParentTableName_Id wird sowohl der für das übergeordnete Element als auch der für das untergeordnete Element erstellten Tabelle hinzugefügt. Die ColumnMapping-Eigenschaft dieser Identitätsspalte wird auf MappingType.Hidden festgelegt. Diese Spalte stellt einen sich automatisch erhöhenden Primärschlüssel für die übergeordnete Tabelle dar und wird für die DataRelation zwischen den beiden Tabellen verwendet. Im Gegensatz zum Datentyp aller anderen abgeleiteten Spalten (System.String) lautet der Datentyp der hinzugefügten Identitätsspalte System.Int32. Außerdem wird anhand der neuen Spalte in der über- und untergeordneten Tabelle eine ForeignKeyConstraint mit DeleteRule = Cascade erstellt.

Betrachten Sie beispielsweise den folgenden XML-Code:

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

Beim Ableitungsvorgang werden zwei Tabellen erstellt: Element1 und ChildElement1.

Die Tabelle Element1 enthält zwei Spalten: Element1_Id und ChildElement2. Die ColumnMapping-Eigenschaft der Spalte Element1_Id wird auf MappingType.Hidden festgelegt. Die ColumnMapping-Eigenschaft der Spalte ChildElement2 wird auf MappingType.Element festgelegt. Die Spalte Element1_Id wird als Primärschlüssel der Tabelle Element1 festgelegt.

Die Tabelle ChildElement1 enthält drei Spalten: attr1, attr2 und Element1_Id. Die ColumnMapping-Eigenschaft der Spalten attr1 und attr2 wird auf MappingType.Attribute festgelegt. Die ColumnMapping-Eigenschaft der Spalte Element1_Id wird auf MappingType.Hidden festgelegt.

Unter Verwendung der Spalten Element1_Id aus beiden Tabellen wird DataRelation und ForeignKeyConstraint erstellt.

DataSet: DocumentElement

Tabelle: Element1

Element1_Id ChildElement2
0 Text2

Tabelle: 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

Siehe auch