XML 架构定义语言(XSD)模式可以包含嵌套在一起的复杂类型。 在这种情况下,映射过程将应用默认映射并在 DataSet 中创建以下内容:
为每种复杂类型(父类型和子类型)各设一个表。
如果父级上不存在唯一约束,则每个表定义又有一个名为 TableName 的主键列_Id其中 TableName 是父表的名称。
父表上施加的主键约束通过将属性
IsPrimaryKey设置为True,从而指定附加列为主键。 约束名为 Constraint# ,其中 #为 1、2、3 等。 例如,第一个约束的默认名称是 Constraint1。在子表上创建外键约束,该约束将附加列标识为引用父表主键的外键。 该约束 ParentTable_ChildTable 其中 ParentTable 是父表的名称, ChildTable 是子表的名称。
在父表和子表之间创建数据关系。
以下示例演示一个架构,其中 OrderDetail 是 Order 的子元素。
<xs:schema id="MyDataSet" xmlns=""
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>
XML 架构映射过程在 数据集中创建以下内容:
Order表 和OrderDetail表。Order(OrderNumber, EmpNumber, Order_Id) OrderDetail(OrderNo, ItemNo, Order_Id)Order表的唯一约束。 请注意,该IsPrimaryKey属性设置为 True。ConstraintName: Constraint1 Type: UniqueConstraint Table: Order Columns: Order_Id IsPrimaryKey: True在
OrderDetail表上的外键约束。ConstraintName: Order_OrderDetail Type: ForeignKeyConstraint Table: OrderDetail Columns: Order_Id RelatedTable: Order RelatedColumns: Order_IdOrder和OrderDetail表之间的关系。 此Nested关系的属性设置为True,因为Order和OrderDetail元素是在架构中嵌套的。ParentTable: Order ParentColumns: Order_Id ChildTable: OrderDetail ChildColumns: Order_Id ParentKeyConstraint: Constraint1 ChildKeyConstraint: Order_OrderDetail RelationName: Order_OrderDetail Nested: True