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

keyref 元素允许你在文档中的元素之间建立链接。 这类似于关系数据库中的外键关系。 如果架构指定 keyref 元素,则元素在架构映射过程中转换为对表中 DataSet列的相应外键约束。 默认情况下,keyref 元素还会生成一个关系,该关系上指定了 ParentTableChildTableParentColumn 和 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
    

另请参阅