Partilhar via


Mapear relações implícitas entre elementos de esquema aninhados

Um esquema XSD (linguagem de definição de esquema XML) pode ter tipos complexos aninhados uns nos outros. Nesse caso, o processo de mapeamento aplica o mapeamento padrão e cria o seguinte no DataSet:

  • Uma tabela para cada um dos tipos complexos (pai e filho).

  • Se não existir uma restrição única na tabela pai, será adicionada uma coluna de chave primária por definição de tabela chamada TableName_Id, onde TableName é o nome da tabela pai.

  • Uma restrição de chave primária na tabela pai identifica a coluna adicional como chave primária (ao definir a propriedade IsPrimaryKey como True). A restrição é chamada Constraint# onde # é 1, 2, 3 e assim por diante. Por exemplo, o nome padrão para a primeira restrição é Constraint1.

  • Uma restrição de chave estrangeira na tabela filha, que identifica a coluna adicional como a chave estrangeira, referindo-se à chave primária da tabela mãe. A restrição é nomeada ParentTable_ChildTable onde ParentTable é o nome da tabela pai e ChildTable é o nome da tabela filho.

  • Uma relação de dados entre as tabelas pai e filho.

O exemplo seguinte mostra um esquema onde OrderDetail é um elemento filho de Ordem.

<xs:schema id="MyDataSet" xmlns=""
            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>

O processo de mapeamento de esquema XML cria o seguinte no DataSet:

  • Order e uma OrderDetail mesa.

    Order(OrderNumber, EmpNumber, Order_Id)
    OrderDetail(OrderNo, ItemNo, Order_Id)
    
  • Uma restrição única na Order tabela. Note que a IsPrimaryKey propriedade está definida como Verdadeiro.

    ConstraintName: Constraint1
    Type: UniqueConstraint
    Table: Order
    Columns: Order_Id
    IsPrimaryKey: True
    
  • Uma restrição de chave estrangeira na tabela OrderDetail.

    ConstraintName: Order_OrderDetail
    Type: ForeignKeyConstraint
    Table: OrderDetail
    Columns: Order_Id
    RelatedTable: Order
    RelatedColumns: Order_Id
    
  • Uma relação entre as Order e OrderDetail tabelas. A propriedade Nested para esta relação é definida como True porque os elementos Order e OrderDetail estão inseridos no esquema.

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

Ver também