XML スキーマ (XSD) からの DataSet リレーションの生成

DataSet では、親子のリレーションを作成することにより、2 つ以上の列間の関連付けを行います。 XML スキーマ定義言語 (XSD) スキーマ内で DataSet のリレーションを表すには、次の 3 つの方法があります。

  • 入れ子になった複合型を指定する方法

  • msdata:Relationship 注釈を使用する方法

  • msdata:ConstraintOnly 注釈を使用せずに xs:keyref を指定する方法

入れ子になった複合型

スキーマ内で複数の複合型の定義が入れ子になっている場合は、それらの入れ子状の要素間に親子のリレーションシップがあります。 OrderDetailOrder 要素の子要素であることを示す XML スキーマのフラグメントを次に示します。

<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 注釈の属性は、リレーションシップに必要な parentkey 要素と childkey 要素、および属性と同様に親子のリレーションシップに必要な要素を示します。 割り当て処理では、その情報に基づいて DataSet にテーブルを作成し、それらのテーブル間に主キー/外部キーのリレーションシップを作成します。

たとえば、同じレベルで (入れ子にせずに) Order 要素と OrderDetail 要素を指定するスキーマのフラグメントを次に示します。 スキーマに msdata:Relationship 注釈を指定すると、その 2 つの要素間に親子のリレーションシップが指定されます。 この場合、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 要素を使用して、DataSet にある Order テーブルの OrderNumber 列と OrderDetail テーブルの OrderNo 列に親子のリレーションシップが生成されます。 割り当て処理で指定されるのはリレーションシップだけで、リレーショナル データベースにおける主キー制約や外部キー制約の場合とは異なり、該当する列の値に対する制約が自動的に指定されることはありません。

このセクションの内容

関連項目