Compartir a través de


Restricciones de esquema XML de clave de asignación (XSD) a restricciones DataSet

En un esquema, puede especificar una restricción de clave en un elemento o atributo mediante el elemento clave . El elemento o atributo en el que se especifica una restricción de clave debe tener valores únicos en cualquier instancia de esquema y no puede tener valores NULL.

La restricción de clave es similar a la restricción única, salvo que la columna en la que se define una restricción de clave no puede tener valores NULL.

En la tabla siguiente se describen los atributos msdata que puede especificar en el elemento clave .

Nombre del atributo Descripción
msdata:ConstraintName Si se especifica este atributo, su valor se usa como nombre de restricción. De lo contrario, el atributo name proporciona el valor del nombre de restricción.
msdata:PrimaryKey Si PrimaryKey="true" está presente, la propiedad de restricción IsPrimaryKey se establece en true, lo que lo convierte en una clave principal. La propiedad de columna AllowDBNull se establece en false, ya que las claves principales no pueden tener valores NULL.

Al convertir el esquema en el que se especifica una restricción de clave, el proceso de asignación crea una restricción única en la tabla con la propiedad de columna AllowDBNull establecida en false para cada columna de la restricción. La propiedad IsPrimaryKey de la restricción unique también se establece en false a menos que se haya especificado msdata:PrimaryKey="true" en el elemento de clave . Esto es idéntico a una restricción única en el esquema en el que PrimaryKey="true".

En el ejemplo de esquema siguiente, el elemento clave especifica la restricción de clave en el 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>

El elemento clave especifica que los valores del elemento secundario CustomerID del elemento Customers deben tener valores únicos y no pueden tener valores NULL. Al traducir el esquema del lenguaje de definición de esquemas XML (XSD), el proceso de asignación crea la tabla siguiente:

Customers(CustomerID, CompanyName, Phone)  

La asignación de esquema XML también crea un objeto UniqueConstraint en la columna CustomerID , como se muestra en el siguiente DataSet. (Por motivos de simplicidad, solo se muestran las propiedades pertinentes).

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

En el DataSet que se genera, la propiedad IsPrimaryKey de UniqueConstraint se establece en true porque el esquema especifica msdata:PrimaryKey="true" en el elemento clave .

El valor de la propiedad ConstraintName de UniqueConstraint en DataSet es el valor del atributo msdata:ConstraintName especificado en el elemento clave del esquema.

Consulte también