Compartir a través de


Generar las relaciones de DataSet desde la definición de esquema XML (XSD)

En un DataSet, para formar una asociación entre dos o más columnas se debe crear una relación primaria-secundaria. Hay tres formas de representar una relación de DataSet dentro de un esquema XSD (lenguaje de definición de esquemas XML):

  • Especificar tipos complejos anidados.
  • Utilizar la anotación msdata:Relationship.
  • Especificar xs:keyref sin la anotación msdata:ConstraintOnly.

Tipos complejos anidados

Las definiciones de tipos complejos anidados de un esquema indican las relaciones primaria-secundaria de los elementos. El siguiente fragmento de esquema XML muestra que OrderDetail es un elemento secundario del elemento Order.

<xs:element name="Order">
  <xs:complexType>
     <xs:sequence>
        ...       <xs:element name="OrderDetail" /> <xs:complexType>
             ...
           </xs:complexType>
     </xs:sequence>
  </xs:complexType>
</xs:element>

El proceso de asignación del esquema XML crea en el DataSet tablas que se corresponden con los tipos complejos anidados del esquema. También crea columnas adicionales que se utilizan como columnas primaria-secundaria para las tablas generadas. Tenga en cuenta que estas columnas primaria-secundaria especifican relaciones, lo que no es igual que las restricciones de clave principal y clave externa.

Anotación msdata:Relationship

La anotación msdata:Relationship le permite especificar explícitamente relaciones primaria-secundaria entre los elementos del esquema que no están anidados. En el siguiente ejemplo se muestra la estructura del elemento Relationship.

<msdata:Relationship name="CustOrderRelationship" 
      msdata:parent="..." 
      msdata:child="..." 
      msdata:parentkey="..." 
      msdata:childkey="..." />

Los atributos de la anotación msdata:Relationship identifican los elementos que forman parte de la relación primaria-secundaria, así como los elementos y atributos parentkey y childkey que participan en la relación. El proceso de asignación utiliza esta información para generar tablas en el DataSet, y para crear la relación de clave principal y clave externa entre estas tablas.

Por ejemplo, en el siguiente fragmento de esquema se especifica que los elementos Order y OrderDetail son del mismo nivel (no están anidados). El esquema especifica una anotación msdata:Relationship, que especifica la relación primaria-secundaria entre estos dos elementos. En este caso, es preciso especificar una relación explícita mediante la anotación msdata:Relationship.

 <xs:element name="MyDataSet" msdata:IsDataSet="true">
  <xs:complexType>
    <xs:choice maxOccurs="unbounded">
        <xs:element name="OrderDetail">
          <xs:complexType>
            ...
          </xs:complexType>
       </xs:element>
       <xs:element name="Order">
          <xs:complexType>
            ...
          </xs:complexType>
       </xs:element>
    </xs:choice>
  </xs:complexType>

 </xs:element>
   <xs:annotation>     <xs:appinfo>       <msdata:Relationship name="OrdOrdDetailRelation"                                       msdata:parent="Order"                                        msdata:child="OrderDetail"                                        msdata:parentkey="OrderNumber"                                        msdata:childkey="OrderNo"/>     </xs:appinfo>  </xs:annotation>

El proceso de asignación utiliza el elemento Relationship para crear una relación primaria-secundaria entre la columna OrderNumber de la tabla Order y la columna OrderNo de la tabla OrderDetail del DataSet. El proceso de asignación sólo especifica la relación; no especifica automáticamente ninguna restricción para los valores de estas columnas, como ocurre en las restricciones de clave principal y clave externa de las bases de datos relacionales. Puede utilizar elementos del esquema XML para especificar restricciones de un DataSet como se describe en Compatibilidad de tipos de datos entre tipos de esquema XML (XSD) y tipos de .NET Framework.

En esta sección

Secciones relacionadas