Restrições do esquema XML da chave do mapa (XSD) para restrições do conjunto de dados
Em um esquema, você pode especificar uma restrição de chave em um elemento ou atributo usando o elemento chave . O elemento ou atributo no qual uma restrição de chave é especificada deve ter valores exclusivos em qualquer instância de esquema e não pode ter valores nulos.
A restrição de chave é semelhante à restrição exclusiva, exceto que a coluna na qual uma restrição de chave é definida não pode ter valores nulos.
A tabela a seguir descreve os atributos msdata que você pode especificar no elemento key .
Attribute name | Description |
---|---|
msdata:ConstraintName | Se esse atributo for especificado, seu valor será usado como o nome da restrição. Caso contrário, o atributo name fornece o valor do nome da restrição. |
msdata:PrimaryKey | Se PrimaryKey="true" estiver presente, a propriedade de restrição IsPrimaryKey será definida como true, tornando-a uma chave primária. A propriedade da coluna AllowDBNull é definida como false, porque as chaves primárias não podem ter valores nulos. |
Na conversão de esquema em que uma restrição de chave é especificada, o processo de mapeamento cria uma restrição exclusiva na tabela com a propriedade de coluna AllowDBNull definida como false para cada coluna na restrição. A propriedade IsPrimaryKey da restrição exclusiva também é definida como false , a menos que você tenha especificado msdata:PrimaryKey="true"
no elemento key . Isso é idêntico a uma restrição única no esquema em que PrimaryKey="true"
.
No exemplo de esquema a seguir, o elemento key especifica a restrição de chave no elemento 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>
O elemento chave especifica que os valores do elemento filho CustomerID do elemento Customers devem ter valores exclusivos e não podem ter valores nulos. Ao traduzir o esquema XSD (XML Schema Definition Language), o processo de mapeamento cria a seguinte tabela:
Customers(CustomerID, CompanyName, Phone)
O mapeamento do esquema XML também cria um UniqueConstraint na coluna CustomerID, conforme mostrado a seguirDataSet. (Para simplificar, apenas as propriedades relevantes são mostradas.)
DataSetName: MyDataSet
TableName: customers
ColumnName: CustomerID
AllowDBNull: False
Unique: True
ConstraintName: KeyCustID
Table: customers
Columns: CustomerID
IsPrimaryKey: True
No DataSet que é gerado, a propriedade IsPrimaryKey do UniqueConstraint é definida como true porque o esquema especifica msdata:PrimaryKey="true"
no elemento key.
O valor da propriedade ConstraintName do UniqueConstraint no DataSet é o valor do atributo msdata:ConstraintName especificado no elemento chave no esquema.