次の方法で共有


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

スキーマでは、 key 要素を使用して、要素または属性にキー制約を指定できます。 キー制約が指定される要素または属性は、どのスキーマ インスタンスでも一意の値を持つ必要があり、null 値を持つことはできません。

キー制約は一意制約に似ていますが、キー制約が定義されている列に null 値を指定することはできません。

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

属性名 説明
msdata:ConstraintName この属性を指定すると、その値が制約名として使用されます。 それ以外の場合、 name 属性は制約名の値を提供します。
msdata:PrimaryKey PrimaryKey="true"が存在する場合、IsPrimaryKey制約プロパティは true に設定されるため、主キーになります。 主キーに null 値を指定できないため、 AllowDBNull 列プロパティは false に設定されます。

キー制約が指定されているスキーマの変換では、マッピング プロセスによってテーブルに一意の制約が作成され、 AllowDBNull 列プロパティが制約内の各列に対して false に設定されます。 IsPrimaryKey要素にfalseを指定していない限り、一意制約のmsdata:PrimaryKey="true"プロパティもkeyに設定されます。 これは、 PrimaryKey="true"するスキーマの一意制約と同じです。

次のスキーマの例では、 key 要素は、 CustomerID 要素のキー制約を指定します。

<xs:schema id="cod"
            xmlns:xs="http://www.w3.org/2001/XMLSchema"
            xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
  <xs:element name="Customers">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="CustomerID" type="xs:string" minOccurs="0" />
        <xs:element name="CompanyName" type="xs:string" minOccurs="0" />
       <xs:element name="Phone" type="xs:string" />
     </xs:sequence>
   </xs:complexType>
 </xs:element>
<xs:element name="MyDataSet" msdata:IsDataSet="true">
  <xs:complexType>
    <xs:choice maxOccurs="unbounded">
      <xs:element ref="Customers" />
    </xs:choice>
  </xs:complexType>
   <xs:key  msdata:PrimaryKey="true"
       msdata:ConstraintName="KeyCustID"
          name="KeyConstCustomerID" >
     <xs:selector xpath=".//Customers" />
     <xs:field xpath="CustomerID" />
    </xs:key>
 </xs:element>
</xs:schema>

key要素は、CustomerID要素のCustomers子要素の値が一意の値を持つ必要があり、null 値を持つことができないことを指定します。 XML スキーマ定義言語 (XSD) スキーマを翻訳する場合、マッピング プロセスによって次の表が作成されます。

Customers(CustomerID, CompanyName, Phone)

XML スキーマ マッピングでは、次のUniqueConstraintに示すように、CustomerID列にDataSetも作成されます。 (わかりやすくするために、関連するプロパティのみが表示されます)。

      DataSetName: MyDataSet
TableName: customers
  ColumnName: CustomerID
      AllowDBNull: False
      Unique: True
  ConstraintName: KeyCustID
      Table: customers
      Columns: CustomerID
      IsPrimaryKey: True

生成されるDataSetでは、スキーマがIsPrimaryKey要素でUniqueConstraintを指定するため、truemsdata:PrimaryKey="true" プロパティがkeyに設定されます。

ConstraintNameUniqueConstraintDataSet プロパティの値は、スキーマのmsdata:ConstraintName要素で指定されたkey属性の値です。

こちらも参照ください