将 keyref XML 架构 (XSD) 约束映射到数据集约束
keyref 元素用于在文档中的元素之间建立链接。 它类似于关系数据库中的外键关系。 如果架构指定了 keyref 元素,则在架构映射过程中,该元素将转换为 DataSet 的表列上的相应外键约束。 默认情况下,keyref 元素还会生成关系,并对关系指定 ParentTable、ChildTable、ParentColumn 和 ChildColumn 属性。
下表概括了可在 keyref 元素中指定的 msdata 属性。
特性名 | 说明 |
---|---|
msdata:ConstraintOnly | 如果对架构中的 keyref 元素指定了 ConstraintOnly="true",则将创建约束但不创建任何关系。 如果此属性未指定(或设置为 false),则将在数据集中创建约束和关系。 |
msdata:ConstraintName | 如果指定了 ConstraintName 属性,则将其值用作约束的名称。 否则,架构中 keyref 元素的 name 属性将提供数据集中的约束名称。 |
msdata:UpdateRule | 如果在架构的 keyref 元素中指定了 UpdateRule 属性,则将其值赋给数据集中的 UpdateRule 约束属性。 否则,UpdateRule 属性将设置为 Cascade。 |
msdata:DeleteRule | 如果在架构的 keyref 元素中指定了 DeleteRule 属性,则将其值赋给数据集中的 DeleteRule 约束属性。 否则,DeleteRule 属性将设置为 Cascade。 |
msdata:AcceptRejectRule | 如果在架构的 keyref 元素中指定了 AcceptRejectRule 属性,则将其值赋给数据集中的 AcceptRejectRule 约束属性。 否则,AcceptRejectRule 属性将设置为 None。 |
以下示例包含一个架构,在 Order 元素的 OrderNumber 子元素和 OrderDetail 元素的 OrderNo 子元素之间指定 key 和 keyref 关系。
在该示例中,OrderDetail 元素的 OrderNumber 子元素引用 Order 元素的 OrderNo 键子元素。
<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="OrderDetail">
<xs:complexType>
<xs:sequence>
<xs:element name="OrderNo" type="xs:integer" />
<xs:element name="ItemNo" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="Order">
<xs:complexType>
<xs:sequence>
<xs:element name="OrderNumber" type="xs:integer" />
<xs:element name="EmpNumber" type="xs:integer" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:choice>
</xs:complexType>
<xs:key name="OrderNumberKey" >
<xs:selector xpath=".//Order" />
<xs:field xpath="OrderNumber" />
</xs:key>
<xs:keyref name="OrderNoRef" refer="OrderNumberKey">
<xs:selector xpath=".//OrderDetail" />
<xs:field xpath="OrderNo" />
</xs:keyref>
</xs:element>
</xs:schema>
XML 架构定义语言 (XSD) 架构映射过程生成以下包含两个表的数据集:
OrderDetail(OrderNo, ItemNo) and
Order(OrderNumber, EmpNumber)
此外,该数据集还定义以下约束:
Order 表的唯一约束。
Table: Order Columns: OrderNumber ConstraintName: OrderNumberKey Type: UniqueConstraint IsPrimaryKey: False
Order 表和 OrderDetail 表之间的关系。 由于这两个元素都不嵌套在架构中,所以 Nested 属性设置为 false。
ParentTable: Order ParentColumns: OrderNumber ChildTable: OrderDetail ChildColumns: OrderNo ParentKeyConstraint: OrderNumberKey ChildKeyConstraint: OrderNoRef RelationName: OrderNoRef Nested: False
OrderDetail 表的外键约束。
ConstraintName: OrderNoRef Type: ForeignKeyConstraint Table: OrderDetail Columns: OrderNo RelatedTable: Order RelatedColumns: OrderNumber