在結構中,你可以用元素 key 來指定元素或屬性的金鑰約束。 指定鍵約束的元素或屬性在任何模式實例中都必須有唯一值,而且不能有 null 值。
索引鍵條件約束類似於唯一條件約束,不同之處在於定義索引鍵條件約束的數據行不能有 Null 值。
下表說明了你可以在 key 元素中指定的 msdata 屬性。
| 屬性名稱 | 說明 |
|---|---|
| msdata:ConstraintName | 如果指定這個屬性,則會使用其值作為條件約束名稱。 否則,屬性 name 會提供約束名稱的值。 |
| msdata:PrimaryKey | 若 PrimaryKey="true" 存在,則 IsPrimaryKey 限制屬性為 真,因此成為主鍵。
AllowDBNull欄位屬性設為假,因為主鍵不能有空值。 |
在轉換指定關鍵約束的結構時,映射過程會在表格上建立一個唯一的限制,欄位 AllowDBNull 屬性設定為 false ,針對限制中的每一欄。 唯一約束key的IsPrimaryKey屬性也會設定為false,除非你在key元素上指定了msdata:PrimaryKey="true"。 這與架構 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值必須具有唯一值,且不能有空值。 在翻譯 XML 架構定義語言 (XSD) 架構時,映射過程會建立下表:
Customers(CustomerID, CompanyName, Phone)
XML Schema 映射也會在CustomerID欄位上建立UniqueConstraint,如DataSet所示。 (為了簡單起見,只會顯示相關屬性。
DataSetName: MyDataSet
TableName: customers
ColumnName: CustomerID
AllowDBNull: False
Unique: True
ConstraintName: KeyCustID
Table: customers
Columns: CustomerID
IsPrimaryKey: True
在生成的DataSet中,IsPrimaryKeyUniqueConstraint屬性設為true,因為在key元素中,綱要指定了msdata:PrimaryKey="true"。
DataSet 在 UniqueConstraint 中的 ConstraintName 屬性值,是在結構描述中的 key 元素中指定的 msdata:ConstraintName 屬性值。