Compartilhar 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 entre si. 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 houver nenhuma restrição exclusiva no pai, uma coluna de chave primária adicional por definição de tabela chamada TableName_Id em que TableName será o nome da tabela pai.

  • Uma restrição de chave primária na tabela pai que identifica a coluna adicional como a chave primária (definindo a propriedade IsPrimaryKey como True). A restrição é denominada Constraint# em que # é 1, 2, 3 etc. Por exemplo, o nome padrão da primeira restrição é Constraint1.

  • Uma restrição de chave estrangeira na tabela filho que identifica a coluna adicional como a chave estrangeira que se refere à chave primária da tabela pai. A restrição se chama ParentTable_ChildTable, em que 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 a seguir mostra um esquema em que OrderDetail é um elemento filho de Order.

<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:

  • Uma tabela Order e uma OrderDetail.

    Order(OrderNumber, EmpNumber, Order_Id)  
    OrderDetail(OrderNo, ItemNo, Order_Id)  
    
  • Uma restrição exclusiva na tabela Order. Observe que a propriedade IsPrimaryKey está definida como True.

    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 tabelas Order e OrderDetail. A propriedade Nested para essa relação é definida como True porque os elementos Order e OrderDetail estão aninhados no esquema.

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

Confira também