从 XML 架构 (XSD) 生成 DataSet 关系

更新:November 2007

DataSet 中,可通过创建父子关系来形成两个或更多个列之间的关联。在 XML 架构定义语言 (XSD) 架构中,表示 DataSet 关系的方法有三种:

  • 指定嵌套复杂类型。

  • 使用 msdata:Relationship 批注。

  • 指定不带 msdata:ConstraintOnly 批注的 xs:keyref

嵌套的复杂类型

架构中的嵌套复杂类型定义指示元素的父子关系。以下 XML 架构片断显示 OrderDetailOrder 元素的子元素。

<xs:element name="Order">
  <xs:complexType>
     <xs:sequence>        
       <xs:element name="OrderDetail" />
           <xs:complexType>             
           </xs:complexType>
     </xs:sequence>
  </xs:complexType>
</xs:element>

XML 架构映射进程在 DataSet 中创建对应于架构中嵌套复杂类型的表。它还会另外创建一些列,以用作所生成的表的父子列。请注意,这些父子列指定关系,这与指定主键/外键约束不同。

msdata:Relationship 批注

msdata:Relationship 批注用于在不嵌套的架构中的元素之间显式指定父子关系。以下示例显示 Relationship 元素的结构。

        <msdata:Relationship name="CustOrderRelationship"  
      msdata:parent=""  
      msdata:child=""  
      msdata:parentkey=""  
      msdata:childkey="" />

msdata:Relationship 批注的属性标识父子关系中所涉及的元素,以及该关系中所涉及的 parentkeychildkey 元素和属性。映射进程使用该信息在 DataSet 中生成表并在这些表之间创建主键/外键关系。

例如,以下架构片断指定位于同一级别(不嵌套)的 OrderOrderDetail 元素。该架构指定了一个 msdata:Relationship 批注,此批注指定这两个元素之间的父子关系。在这种情况下,必须使用 msdata:Relationship 批注来指定显式关系。

 <xs:element name="MyDataSet" msdata:IsDataSet="true">
  <xs:complexType>
    <xs:choice maxOccurs="unbounded">
        <xs:element name="OrderDetail">
          <xs:complexType>
            
          </xs:complexType>
       </xs:element>
       <xs:element name="Order">
          <xs:complexType>
            
          </xs:complexType>
       </xs:element>
    </xs:choice>
  </xs:complexType>
</xs:element>
   <xs:annotation>
     <xs:appinfo>
       <msdata:Relationship name="OrdOrdDetailRelation"
          msdata:parent="Order"
          msdata:child="OrderDetail" 
          msdata:parentkey="OrderNumber"
          msdata:childkey="OrderNo"/>
     </xs:appinfo>
  </xs:annotation>
 

映射进程使用 Relationship 元素在 Order 表中的 OrderNumber 列和 DataSetOrderDetail 表中的 OrderNo 列之间创建父子关系。映射进程仅指定关系;与关系数据库中的主键/外键约束不同,它并不会自动为这些列中的值指定任何约束。

本节内容

相关章节