次の方法で共有


keyref XML スキーマ (XSD) 制約を DataSet 制約にマップする

keyref 要素を使用すると、ドキュメント内の要素間のリンクを確立できます。 これは、リレーショナル データベースの外部キーリレーションシップに似ています。 スキーマで keyref 要素が指定されている場合、要素はスキーマ マッピング プロセス中に、 DataSetのテーブル内の列の対応する外部キー制約に変換されます。 既定では、 keyref 要素は、リレーションシップで指定された ParentTableChildTableParentColumnおよび ChildColumn プロパティを使用して、リレーションも生成します。

次の表は、keyref 要素で指定できる msdata 属性の概要を示しています。

属性名 説明
msdata:ConstraintOnly スキーマの keyref 要素に ConstraintOnly="true" が指定されている場合、制約は作成されますが、リレーションシップは作成されません。 この属性が指定されていない (または False に設定されている) 場合は、制約とリレーションシップの両方が DataSet に作成されます。
msdata:ConstraintName ConstraintName 属性が指定されている場合、その値は制約の名前として使用されます。 それ以外の場合、スキーマの keyref 要素の name 属性は、DataSet の制約名を提供します。
msdata:UpdateRule スキーマの keyref 要素で UpdateRule 属性が指定されている場合、その値は DataSetUpdateRule 制約プロパティに割り当てられます。 それ以外の場合、 UpdateRule プロパティは Cascade に設定されます。
msdata:DeleteRule DeleteRule 属性がスキーマの keyref 要素で指定されている場合、その値は DataSetDeleteRule 制約プロパティに割り当てられます。 それ以外の場合、 DeleteRule プロパティは Cascade に設定されます。
msdata:AcceptRejectRule スキーマの keyref 要素で AcceptRejectRule 属性が指定されている場合、その値は DataSetAcceptRejectRule 制約プロパティに割り当てられます。 それ以外の場合、 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) スキーマ マッピング プロセスでは、次の DataSet と 2 つのテーブルが生成されます。

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

さらに、 DataSet は次の制約を定義します。

  • Order テーブルの一意の制約。

              Table: Order  
    Columns: OrderNumber
    ConstraintName: OrderNumberKey  
    Type: UniqueConstraint  
    IsPrimaryKey: False  
    
  • Order テーブルと OrderDetail テーブルの間の関係。 2 つの要素がスキーマで入れ子になっていないため、 入れ子になった プロパティは 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
    

こちらも参照ください