次の方法で共有


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

XML スキーマ定義言語 (XSD) スキーマでは、 unique 要素は、要素または属性の一意性制約を指定します。 XML スキーマをリレーショナル スキーマに変換するプロセスでは、XML スキーマ内の要素または属性に指定された一意制約が、生成される対応するDataTableDataSetの一意制約にマップされます。

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

属性名 説明
msdata:ConstraintName この属性を指定すると、その値が制約名として使用されます。 それ以外の場合、 name 属性は制約名の値を提供します。
msdata:PrimaryKey PrimaryKey="true"unique要素に存在する場合は、IsPrimaryKey プロパティを true に設定して一意の制約が作成されます。

次の例は、 unique 要素を使用して一意性制約を指定する XML スキーマを示しています。

<xs:schema id="SampleDataSet"
            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:integer"
           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="SampleDataSet" msdata:IsDataSet="true">
  <xs:complexType>
    <xs:choice maxOccurs="unbounded">
      <xs:element ref="Customers" />
    </xs:choice>
  </xs:complexType>
   <xs:unique     msdata:ConstraintName="UCustID"     name="UniqueCustIDConstr" >       <xs:selector xpath=".//Customers" />       <xs:field xpath="CustomerID" />     </xs:unique>
</xs:element>
</xs:schema>

スキーマの unique 要素は、ドキュメント インスタンス内のすべての Customers 要素について、 CustomerID 子要素の値が一意である必要があることを指定します。 DataSet をビルドする場合、マッピング プロセスはこのスキーマを読み取り、次の表を生成します。

Customers (CustomerID, CompanyName, Phone)

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

      DataSetName: MyDataSet
TableName: Customers
  ColumnName: CustomerID
      AllowDBNull: True
      Unique: True
  ConstraintName: UcustID       Type: UniqueConstraint
      Table: Customers
      Columns: CustomerID
      IsPrimaryKey: False

生成される DataSet では、 IsPrimaryKey プロパティは一意制約の False に設定されます。 列の unique プロパティは、 CustomerID 列の値が一意である必要があることを示します (ただし、列の AllowDBNull プロパティで指定されているように、null 参照を指定できます)。

スキーマを変更し、省略可能な msdata:PrimaryKey 属性値を True に設定すると、テーブルに一意の制約が作成されます。 AllowDBNull列プロパティは False に設定され、制約のIsPrimaryKeyプロパティは True に設定されるため、CustomerID列は主キー列になります。

XML スキーマ内の要素または属性の組み合わせに対して一意の制約を指定できます。 次の例では、スキーマに別の CustomerID 要素を追加して、CompanyName値とCustomers値の組み合わせを任意のインスタンスのすべてのに対して一意にする必要があることを指定する方法を示します。

      <xs:unique
         msdata:ConstraintName="SomeName"
         name="UniqueCustIDConstr" >
  <xs:selector xpath=".//Customers" />
  <xs:field xpath="CustomerID" />
  <xs:field xpath="CompanyName" />
</xs:unique>

これは、結果の DataSet で作成される制約です。

ConstraintName: SomeName
  Table: Customers
  Columns: CustomerID CompanyName
  IsPrimaryKey: False

こちらも参照ください