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