An XML Schema definition language (XSD) schema can have complex types nested inside one another. In this case, the mapping process applies default mapping and creates the following in the DataSet:
- One table for each of the complex types (parent and child).
- If no unique constraint exists on the parent, each table definition includes one additional primary key column named as TableName_Id where TableName is the name of the parent table.
- A primary key constraint on the parent table identifying the additional column as the primary key (by setting the IsPrimaryKey property to True). The constraint is named as Constraint*#* where # is 1, 2, 3, and so on. For example, the default name for the first constraint is Constraint1.
- A foreign key constraint on the child table identifying the additional column as the foreign key referring to the primary key of the parent table. The constraint is named as ParentTable_ChildTable where ParentTable is the name of the parent table and ChildTable is the name of the child table.
- A data relation between the parent and child tables.
The following example shows a schema where OrderDetail is a child element of Order.
<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>
The XML Schema mapping process creates the following in the DataSet:
- An Order and an OrderDetail table. - Order(OrderNumber, EmpNumber, Order_Id) OrderDetail(OrderNo, ItemNo, Order_Id)
- A unique constraint on the Order table. Note that the IsPrimaryKey property is set to True. - ConstraintName: Constraint1 Type: UniqueConstraint Table: Order Columns: Order_Id IsPrimaryKey: True
- A foreign key constraint on the OrderDetail table. - ConstraintName: Order_OrderDetail Type: ForeignKeyConstraint Table: OrderDetail Columns: Order_Id RelatedTable: Order RelatedColumns: Order_Id
- A relationship between the Order and OrderDetail tables. The Nested property for this relationship is set to True because the Order and OrderDetail elements are nested in the schema. - ParentTable: Order ParentColumns: Order_Id ChildTable: OrderDetail ChildColumns: Order_Id ParentKeyConstraint: Constraint1 ChildKeyConstraint: Order_OrderDetail RelationName: Order_OrderDetail Nested: True
See Also
Generating DataSet Relations from XML Schema (XSD) | Mapping XML Schema (XSD) Constraints to DataSet Constraints | Data Type Support between XML Schema (XSD) Types and .NET Framework Types