keyref 元素允许你在文档中的元素之间建立链接。 这类似于关系数据库中的外键关系。 如果架构指定 keyref 元素,则元素在架构映射过程中转换为对表中 DataSet列的相应外键约束。 默认情况下,keyref 元素还会生成一个关系,该关系上指定了 ParentTable、ChildTable、ParentColumn 和 ChildColumn 属性。
下表概述了可以在 keyref 元素中指定的 msdata 属性。
属性名称 | DESCRIPTION |
---|---|
msdata:ConstraintOnly | 如果在架构中的 keyref 元素上指定 ConstraintOnly=“true”,则会创建约束,但不创建任何关系。 如果未指定此属性(或设置为 False),则会在 数据集中创建约束和关系。 |
msdata:ConstraintName | 如果指定 ConstraintName 属性,则其值将用作约束的名称。 否则,架构中 keyref 元素的名称属性在数据集中提供约束名称。 |
msdata:UpdateRule | 如果在架构的 keyref 元素中指定 UpdateRule 属性,则其值将分配给 DataSet 中的 UpdateRule 约束属性。 否则, UpdateRule 属性设置为 Cascade。 |
msdata:DeleteRule | 如果在架构的 keyref 元素中指定了 DeleteRule 属性,则会将其值分配给 DataSet 中的 DeleteRule 约束属性。 否则, DeleteRule 属性设置为 Cascade。 |
msdata:AcceptRejectRule | 如果在架构的 keyref 元素中指定 AcceptRejectRule 属性,则会将其值分配给数据集中的 AcceptRejectRule 约束属性。 否则 AcceptRejectRule 属性设置为 None。 |
下面的示例包含一个模式,该模式指定 Order 元素的 OrderNumber 子元素与 OrderDetail 元素的 OrderNo 子元素之间的 键 和 键引用 关系。
在此示例中,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)
此外, DataSet 还定义了以下约束:
Order 表的唯一约束。
Table: Order Columns: OrderNumber ConstraintName: OrderNumberKey Type: UniqueConstraint IsPrimaryKey: False
「Order」和「OrderDetail」表之间的关系。 嵌套属性设置为 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