Partilhar via


Mapear restrições chave do esquema XML (XSD) para restrições do DataSet

Num esquema, pode especificar uma restrição de chave num elemento ou atributo usando esse key elemento. 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 seguinte descreve os msdata atributos que pode especificar no key 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, a IsPrimaryKey propriedade de restrição é definida como verdadeira, tornando-a assim uma chave primária. A AllowDBNull propriedade da coluna está definida como falsa, porque as chaves primárias não podem ter valores nulos.

Ao converter um esquema em que uma restrição de chave é especificada, o processo de mapeamento cria uma restrição única na tabela com a AllowDBNull propriedade coluna definida como false para cada coluna da restrição. A IsPrimaryKey propriedade da restrição única também é definida como a false menos que tenha especificado msdata:PrimaryKey="true" no key elemento. Isso é idêntico a uma restrição única no esquema em que PrimaryKey="true".

No exemplo seguinte do esquema, o key elemento especifica a restrição de chave sobre o CustomerID elemento.

<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 key elemento especifica que os valores do CustomerID elemento Customers filho do elemento devem ter valores únicos 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 XML Schema também cria um UniqueConstraint na coluna CustomerID, como mostrado no seguinte DataSet. (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 key do esquema.

Ver também