將 unique XML 結構描述 (XSD) 條件約束對應至資料集條件約束
XML 結構描述定義語言 (XSD) 結構描述中,unique 元素是用來指定元素或屬性上條件約束的唯一性。 在將 XML 結構描述轉譯到關聯式結構描述的處理序中,會將 XML 結構描述內項目或屬性上指定的唯一的條件約束 (Constraint),對應到所產生的對應 DataTable 內 DataSet 的唯一的條件約束。
下表列出您可在 unique 元素中指定的 msdata 屬性。
Attribute name | 描述 |
---|---|
msdata:ConstraintName | 如果指定這個屬性,則它的值會被當成條件約束名稱使用。 否則,會由 name 屬性提供限制式名稱的值。 |
msdata:PrimaryKey | 如果 unique 元素中出現 PrimaryKey="true" ,則會將 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 資料行上建立唯一的條件約束,如下列 DataSet 所示。 (為了便於了解,此處僅顯示相關屬性)。
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 結構描述中,將唯一的條件約束指定給合併的項目或屬性。 下列範例說明如何藉由在結構描述中新增其他的 xs:field 元素,指定 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