Freigeben über


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