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