Partilhar via


Mapear restrições específicas do esquema XML (XSD) para restrições de conjunto de dados

Numa linguagem de definição de esquema XML (XSD), o unique elemento especifica a restrição de unicidade de um elemento ou atributo. No processo de tradução de um esquema XML num esquema relacional, a restrição exclusiva especificada num elemento ou atributo no esquema XML é mapeada para uma restrição exclusiva no DataTable no DataSet correspondente que é gerado.

A tabela seguinte descreve os msdata atributos que pode especificar no unique elemento.

Nome do atributo Descrição
msdata:ConstraintName Se esse atributo for especificado, seu valor será usado como o nome da restrição. Caso contrário, o name atributo fornece o valor do nome da restrição.
msdata:PrimaryKey Se PrimaryKey="true" estiver presente no unique elemento, é criada uma restrição única com a IsPrimaryKey propriedade definida como verdadeira.

O exemplo seguinte mostra um Esquema XML que utiliza o unique elemento para especificar uma restrição de unicidade.

<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>

O unique elemento no esquema especifica que, para todos Customers os elementos numa instância de documento, o valor do CustomerID elemento filho deve ser único. Ao criar o DataSet, o processo de mapeamento lê esse esquema e gera a seguinte tabela:

Customers (CustomerID, CompanyName, Phone)

O processo de mapeamento também cria uma restrição única na CustomerID coluna, como mostrado no DataSet seguinte. (Para simplificar, apenas as propriedades relevantes são mostradas.)

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

No DataSet que é gerado, a IsPrimaryKey propriedade é definida como False para a única restrição. A unique propriedade na coluna indica que os CustomerID valores da coluna devem ser únicos (mas podem ser uma referência nula, conforme especificado pela AllowDBNull propriedade da coluna).

Se modificar o esquema e definir o valor opcional msdata:PrimaryKey do atributo como True, a restrição única é criada na tabela. A AllowDBNull propriedade da coluna é definida como Falso, e a IsPrimaryKey propriedade da restrição definida como Verdadeira, tornando assim a CustomerID coluna uma coluna chave primária.

Você pode especificar uma restrição exclusiva em uma combinação de elementos ou atributos no esquema XML. O exemplo seguinte demonstra como especificar que uma combinação de CustomerID valores e CompanyName deve ser única para todos Customers em qualquer instância, adicionando outro elemento xs:field no esquema.

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

Esta é a restrição que é criada no DataSet resultante.

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

Ver também