Udostępnij za pośrednictwem


Mapowanie niejawnych relacji między zagnieżdżonymi elementami schematu

Schemat języka definicji schematu XML (XSD) może zawierać złożone typy zagnieżdżone wewnątrz siebie. W takim przypadku proces mapowania stosuje mapowanie domyślne i tworzy następujące polecenie w pliku DataSet:

  • Jedna tabela dla każdego z typów złożonych (nadrzędny i podrzędny).

  • Jeśli w obiekcie nadrzędnym nie istnieje żadne unikatowe ograniczenie, jedna dodatkowa kolumna klucza podstawowego dla definicji tabeli o nazwie TableName_Id gdzie TableName jest nazwą tabeli nadrzędnej.

  • Ograniczenie klucza podstawowego w tabeli nadrzędnej identyfikujące dodatkową kolumnę jako klucz podstawowy (przez ustawienie właściwości IsPrimaryKey na True). Ograniczenie ma nazwę Constraint#, gdzie # to 1, 2, 3 itd. Na przykład domyślna nazwa pierwszego ograniczenia to Constraint1.

  • Ograniczenie klucza obcego w tabeli podrzędnej identyfikujące dodatkową kolumnę jako klucz obcy odwołujący się do klucza podstawowego tabeli nadrzędnej. Ograniczenie ma nazwę ParentTable_ChildTable gdzie ParentTable jest nazwą tabeli nadrzędnej, a element ChildTable jest nazwą tabeli podrzędnej.

  • Relacja danych między tabelami nadrzędnymi i podrzędnym.

Poniższy przykład przedstawia schemat, w którym OrderDetail jest elementem podrzędnym 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>  

Proces mapowania schematu XML tworzy następujące elementy w zestawie danych:

  • Tabela Order i OrderDetail .

    Order(OrderNumber, EmpNumber, Order_Id)  
    OrderDetail(OrderNo, ItemNo, Order_Id)  
    
  • Unikatowe ograniczenie w tabeli Order . Należy pamiętać, że właściwość IsPrimaryKey jest ustawiona na wartość True.

    ConstraintName: Constraint1  
    Type: UniqueConstraint  
    Table: Order  
    Columns: Order_Id
    IsPrimaryKey: True  
    
  • Ograniczenie klucza obcego w tabeli OrderDetail .

    ConstraintName: Order_OrderDetail  
    Type: ForeignKeyConstraint  
    Table: OrderDetail  
    Columns: Order_Id
    RelatedTable: Order  
    RelatedColumns: Order_Id
    
  • Relacja między tabelami Order i OrderDetail . Właściwość Zagnieżdżona dla tej relacji ma wartość True , ponieważ elementy Order i OrderDetail są zagnieżdżone w schemacie.

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

Zobacz też