将关键 XML 架构 (XSD) 约束映射到数据集约束
在架构中可以使用 key 元素对元素或属性指定键约束。 对其指定键约束的元素或属性必须在任何架构实例中都具有唯一值,并且不能具有空值。
除了对其定义键约束的列不能具有空值之外,键约束与唯一约束类似。
下表概括了可在 key 元素中指定的 msdata 属性。
特性名 | 说明 |
---|---|
msdata:ConstraintName | 如果指定了该属性,它的值将用作约束名。 否则,name 属性会提供约束名的值。 |
msdata:PrimaryKey | 如果存在 PrimaryKey="true" ,IsPrimaryKey 约束属性将设置为 true,从而使其成为主键。 由于主键不能具有空值,所以 AllowDBNull 列属性将设置为 false。 |
当转换指定了键约束的架构时,映射过程会在为约束中的每一列将 AllowDBNull 列属性设置为 false 的情况下在表上创建唯一约束。 除非对 key 元素指定 msdata:PrimaryKey="true"
,否则唯一约束的 IsPrimaryKey 属性也将设置为 false。 它与 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 元素指定 Customers 元素的 CustomerID 子元素的值必须是唯一值,并且不能具有空值。 在转换 XML 架构定义语言 (XSD) 架构时,映射过程将创建下表:
Customers(CustomerID, CompanyName, Phone)
XML 架构映射还会在 CustomerID 列上创建 UniqueConstraint,如以下 DataSet 所示。 (为简便起见,只显示相关属性。)
DataSetName: MyDataSet
TableName: customers
ColumnName: CustomerID
AllowDBNull: False
Unique: True
ConstraintName: KeyCustID
Table: customers
Columns: CustomerID
IsPrimaryKey: True
在所生成的 DataSet 中,由于该架构在 key 元素中指定 msdata:PrimaryKey="true"
,所以 UniqueConstraint 的 IsPrimaryKey 属性将设置为 true。
DataSet 中 UniqueConstraint 的 ConstraintName 属性值是在该架构的 key 元素中指定的 msdata:ConstraintName 属性值。