Compartir a través de


Asignar relaciones implícitas entre elementos de esquema anidados

Un esquema del lenguaje de definición de esquema XML (XSD) puede tener tipos complejos anidados dentro de otros. En este caso, el proceso de asignación aplica la asignación predeterminada y crea lo siguiente en el DataSet:

  • Una tabla para cada uno de los tipos complejos (primario y secundario).
  • Si no existe ninguna restricción única en el primario, cada definición de tabla incluye una columna adicional de clave principal denominada NombreTabla_Id, donde NombreTabla es el nombre de la tabla primaria.
  • Una restricción de clave principal en la tabla primaria que identifica la columna adicional como clave primaria (la propiedad IsPrimaryKey se establece como True). La restricción recibe el nombre Constraint*#*, donde # es 1, 2, 3, etc. Por ejemplo, el nombre predeterminado de la primera restricción es Constraint1.
  • Una restricción de clave externa en la tabla secundaria que identifica la columna adicional como clave externa que hace referencia a la clave principal de la tabla primaria. La restricción recibe el nombre TablaPrimaria_TablaSecundaria, donde TablaPrimaria es el nombre de la tabla primaria y TablaSecundaria es el nombre de la tabla secundaria.
  • Una relación de datos entre las tablas primaria y secundaria.

En el siguiente ejemplo se muestra un esquema donde OrderDetail es un elemento secundario de Order.

<xs:schema id="MyDataSet"  
            xmlns:xs="http://www.w3.org/2001/XMLSchema" 
            xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">

 <xs:element name="MyDataSet" msdata:IsDataSet="true">
   <xs:complexType>
     <xs:choice maxOccurs="unbounded">
       <xs:element name="Order">
         <xs:complexType>
          <xs:sequence>
            <xs:element name="OrderNumber" type="xs:string" />
            <xs:element name="EmpNumber" type="xs:string" />
            <xs:element name="OrderDetail">
              <xs:complexType>
                <xs:sequence>
                  <xs:element name="OrderNo" type="xs:string" />
                  <xs:element name="ItemNo" type="xs:string" />
                </xs:sequence>
              </xs:complexType>
            </xs:element>
          </xs:sequence>
         </xs:complexType>
       </xs:element>
     </xs:choice>
   </xs:complexType>
  </xs:element>
</xs:schema>

El proceso de asignación del esquema XML crea lo siguiente en el DataSet:

  • Una tabla Order y una tabla OrderDetail.

    Order(OrderNumber, EmpNumber, Order_Id)
    OrderDetail(OrderNo, ItemNo, Order_Id)
    
  • Una restricción única en la tabla Order. Tenga en cuenta que la propiedad IsPrimaryKey tiene el valor True.

    ConstraintName: Constraint1
    Type: UniqueConstraint
    Table: Order
    Columns: Order_Id 
    IsPrimaryKey: True
    
  • Una restricción de clave externa en la tabla OrderDetail.

    ConstraintName: Order_OrderDetail
    Type: ForeignKeyConstraint
    Table: OrderDetail
    Columns: Order_Id 
    RelatedTable: Order
    RelatedColumns: Order_Id 
    
  • Una relación entre las tablas Order y OrderDetail. La propiedad Nested de esta relación tiene el valor True, ya que los elementos Order y OrderDetail están anidados en el esquema.

    ParentTable: Order
    ParentColumns: Order_Id 
    ChildTable: OrderDetail
    ChildColumns: Order_Id 
    ParentKeyConstraint: Constraint1
    ChildKeyConstraint: Order_OrderDetail
    RelationName: Order_OrderDetail
    Nested: True
    

Vea también

Generar las relaciones de DataSet desde la definición de esquema XML (XSD) | Asignar restricciones de esquema XML (XSD) a las restricciones de DataSet | Compatibilidad de tipos de datos entre tipos de esquema XML (XSD) y tipos de .NET Framework