Zuordnen von impliziten Beziehungen zwischen geschachtelten Schemaelementen
Ein XML Schema Definition (XSD)-Sprachschema kann komplexe Typen aufweisen, die ineinander geschachtelt sind. In diesem Fall wendet der Zuordnungsprozess die Standardzuordnung an und erstellt Folgendes im DataSet:
- Eine Tabelle für jeden komplexen Typ (über- und untergeordnet).
- Wenn keine unique-Einschränkung im übergeordneten Typ vorliegt, enthält jede Tabellendefinition eine zusätzliche Primärschlüsselspalte namens "TableName_Id", wobei TableName der Name der übergeordneten Tabelle ist.
- Eine Primärschlüsseleinschränkung für die übergeordnete Tabelle, die die zusätzliche Spalte als Primärschlüssel identifiziert (indem für die IsPrimaryKey-Eigenschaft True festgelegt wird). Die Einschränkung wird "Constraint#" genannt, wobei # für 1, 2, 3 usw. steht. Beispielsweise lautet der Standardname für die erste Einschränkung "Constraint1".
- Eine Fremdschlüsseleinschränkung für die untergeordnete Tabelle, die die zusätzliche Spalte als fremden Schlüssel identifiziert, der auf den Primärschlüssel der übergeordneten Tabelle verweist. Die Einschränkung wird "ParentTable_ChildTable" genannt, wobei ParentTable der Name der übergeordneten Tabelle und ChildTable der Name der untergeordneten Tabelle ist.
- Eine Datenbeziehung zwischen den übergeordneten und untergeordneten Tabellen.
Das folgende Beispiel zeigt ein Schema, in dem OrderDetail ein untergeordnetes Element des Order-Elements ist.
<xs:schema id="MyDataSet"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xs:element name="MyDataSet" msdata:IsDataSet="true">
<xs:complexType>
<xs:choice maxOccurs="unbounded">
<xs:element name="Order">
<xs:complexType>
<xs:sequence>
<xs:element name="OrderNumber" type="xs:string" />
<xs:element name="EmpNumber" type="xs:string" />
<xs:element name="OrderDetail">
<xs:complexType>
<xs:sequence>
<xs:element name="OrderNo" type="xs:string" />
<xs:element name="ItemNo" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:choice>
</xs:complexType>
</xs:element>
</xs:schema>
Der XML-Schemazuordnungsprozess erstellt Folgendes im DataSet:
Eine Order-Tabelle und eine OrderDetail-Tabelle.
Order(OrderNumber, EmpNumber, Order_Id) OrderDetail(OrderNo, ItemNo, Order_Id)
Eine unique-Einschränkung für die Order-Tabelle. Beachten Sie, dass für die IsPrimaryKey-Eigenschaft True festgelegt ist.
ConstraintName: Constraint1 Type: UniqueConstraint Table: Order Columns: Order_Id IsPrimaryKey: True
Eine Fremdschlüsseleinschränkung für die OrderDetail-Tabelle.
ConstraintName: Order_OrderDetail Type: ForeignKeyConstraint Table: OrderDetail Columns: Order_Id RelatedTable: Order RelatedColumns: Order_Id
Eine Beziehung zwischen den Tabellen Order und OrderDetail. Für die Nested-Eigenschaft für diese Beziehung ist True festgelegt, weil die Elemente Order und OrderDetail im Schema geschachtelt sind.
ParentTable: Order ParentColumns: Order_Id ChildTable: OrderDetail ChildColumns: Order_Id ParentKeyConstraint: Constraint1 ChildKeyConstraint: Order_OrderDetail RelationName: Order_OrderDetail Nested: True
Siehe auch
Generieren von DataSet-Beziehungen aus einem XML-Schema (XSD) | Zuordnen von XML-Schema (XSD)-Einschränkungen zu DataSet-Einschränkungen | Datentypunterstützung zwischen XML-Schematypen (XSD) und .NET Framework-Typen