Partilhar via


Mapear restrições exclusivas de esquema XML (XSD) para restrições de conjunto de dados

Em um esquema XSD (XML Schema Definition Language), o elemento exclusivo especifica a restrição de exclusividade em um elemento ou atributo. No processo de tradução de um esquema XML em um esquema relacional, a restrição exclusiva especificada em um elemento ou atributo no esquema XML é mapeada para uma restrição exclusiva no DataTable correspondente DataSet que é gerado.

A tabela a seguir descreve os atributos msdata que você pode especificar no elemento exclusivo .

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 no elemento exclusivo , uma restrição exclusiva será criada com a propriedade IsPrimaryKey definida como true.

O exemplo a seguir mostra um esquema XML que usa o elemento exclusivo para especificar uma restrição de exclusividade.

<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 elemento exclusivo no esquema especifica que, para todos os elementos Customers em uma instância de documento, o valor do elemento filho CustomerID deve ser exclusivo. 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 exclusiva na coluna CustomerID, conforme mostrado no DataSet a seguir. (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 propriedade IsPrimaryKey é definida como False para a restrição exclusiva. A propriedade unique na coluna indica que os valores da coluna CustomerID devem ser exclusivos (mas podem ser uma referência nula, conforme especificado pela propriedade AllowDBNull da coluna).

Se você modificar o esquema e definir o valor opcional do atributo msdata:PrimaryKey como True, a restrição exclusiva será criada na tabela. A propriedade da coluna AllowDBNull é definida como False e a propriedade IsPrimaryKey da restrição é definida como True, tornando a coluna CustomerID uma coluna de chave primária.

Você pode especificar uma restrição exclusiva em uma combinação de elementos ou atributos no esquema XML. O exemplo a seguir demonstra como especificar que uma combinação de valores CustomerID e CompanyName deve ser exclusiva para todos os Clientes 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  

Consulte também