Compartilhar via


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

Em um esquema, você pode especificar uma restrição de chave em um elemento ou atributo usando o elemento key. 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.

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 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 de coluna AllowDBNull é definida como false, pois as chaves primárias não podem ter valores nulos.

Ao converter o esquema no qual 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 exclusiva no esquema no qual 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 key 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 (linguagem de definição de esquema XML), o processo de mapeamento cria a seguinte tabela:

Customers(CustomerID, CompanyName, Phone)  

O mapeamento de esquema XML também cria um UniqueConstraint na coluna CustomerID, conforme mostrado no DataSet a seguir. (Para simplificar, apenas propriedades relevantes são mostradas.)

      DataSetName: MyDataSet  
TableName: customers  
  ColumnName: CustomerID  
      AllowDBNull: False  
      Unique: True  
  ConstraintName: KeyCustID  
      Table: customers  
      Columns: CustomerID
      IsPrimaryKey: True  

No Conjunto de Dados 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 Conjunto de Dados é o valor do atributo msdata:ConstraintName especificado no elemento key no esquema.

Confira também