次の方法で共有


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

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

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

属性名 説明
msdata:ConstraintOnly スキーマの要素keyref が指定されている場合、制約は作成されますが、リレーションシップは作成されません。 この属性が指定されていない (または False に設定されている) 場合は、制約とリレーションシップの両方が DataSet に作成されます。
msdata:ConstraintName ConstraintName属性を指定すると、その値が制約の名前として使用されます。 それ以外の場合、スキーマのname要素のkeyref属性は、DataSet の制約名を提供します。
msdata:UpdateRule スキーマのUpdateRule要素でkeyref属性が指定されている場合、その値は UpdateRule制約プロパティに割り当てられます。 それ以外の場合、 UpdateRule プロパティは Cascade に設定 されます
msdata:DeleteRule スキーマのDeleteRule要素でkeyref属性が指定されている場合、その値は DeleteRule制約プロパティに割り当てられます。 それ以外の場合、 DeleteRule プロパティは Cascade に設定 されます
msdata:AcceptRejectRule スキーマのAcceptRejectRule要素でkeyref属性が指定されている場合、その値は AcceptRejectRule制約プロパティに割り当てられます。 それ以外の場合、 AcceptRejectRule プロパティは None に設定されます。

次の例には、key要素のkeyref子要素とOrderNumber要素のOrder子要素の間のOrderNoOrderDetailのリレーションシップを指定するスキーマが含まれています。

この例では、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) スキーマ マッピング プロセスでは、2 つのテーブルを含む次の DataSet が生成されます。

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

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

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

              Table: Order
    Columns: OrderNumber
    ConstraintName: OrderNumberKey
    Type: UniqueConstraint
    IsPrimaryKey: False
    
  • OrderテーブルとOrderDetail テーブルの間のリレーションシップ。 Nestedプロパティは、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
    

こちらも参照ください