将 keyref XML 架构 (XSD) 约束映射到数据集约束

keyref 元素允许你在文档中的元素之间建立链接。 这类似于关系数据库中的外键关系。 如果架构指定 keyref 元素,则元素在架构映射过程中转换为对表中 DataSet列的相应外键约束。 默认情况下,该 keyref 元素还会生成一个关系,该关系具有 ParentTableChildTableParentColumnChildColumn 指定属性。

下表概述了可以在 keyref 元素中指定的 msdata 属性。

属性名称 DESCRIPTION
msdata:ConstraintOnly 如果在架构中的元素上指定 keyref,则会创建约束,但不会创建任何关系。 如果未指定此属性(或设置为 False),则会在 数据集中创建约束和关系。
msdata:ConstraintName 如果指定了特性 ConstraintName ,则其值将用作约束的名称。 否则,架构中keyref元素的name属性将在DataSet中提供约束名称。
msdata:UpdateRule 如果在架构中的keyref元素中指定了UpdateRule特性,则其值将被分配给DataSet中的UpdateRule约束属性。 否则,该 UpdateRule 属性将设置为 Cascade
msdata:DeleteRule DeleteRule在架构中的keyref元素指定了该特性时,其值将分配给DataSet中的DeleteRule约束属性。 否则,该 DeleteRule 属性将设置为 Cascade
msdata:AcceptRejectRule 如果在架构的keyref元素中指定了AcceptRejectRule属性,则该属性的值将分配给DataSet中的AcceptRejectRule约束属性。 否则,该 AcceptRejectRule 属性设置为 None

下面的示例包含一个架构,该架构中指定了元素的Order子元素与元素的OrderDetail子元素之间的keykeyref关系、以及OrderNumberOrderNo关系。

在此示例中, OrderNumber 元素的 OrderDetail 子元素引用 OrderNo 元素的关键 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="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] 的模式映射过程生成了如下结果,包括 DataSet 和两个表:

OrderDetail(OrderNo, ItemNo) and
Order(OrderNumber, EmpNumber)

此外,DataSet 定义了以下约束:

  • Order 表的唯一约束。

              Table: Order
    Columns: OrderNumber
    ConstraintName: OrderNumberKey
    Type: UniqueConstraint
    IsPrimaryKey: False
    
  • OrderOrderDetail表之间的关系。 该 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
    

另请参阅