Сопоставление неявных связей между вложенными элементами схемы (ADO.NET)
Обновлен: November 2007
Схема на языке XSD может иметь сложные типы, вложенные друг в друга. В этом случае процесс сопоставления применяет сопоставление по умолчанию и создает в объекте DataSet:
одну таблицу для каждого сложного типа (родительского и дочернего);
один дополнительный столбец TableName_Id в первичном ключе на каждое определение таблицы, где TableName — это имя родительской таблицы, если для родительской таблицы не существует ограничения уникальности;
ограничение первичного ключа для родительской таблицы, определяющее дополнительный столбец как часть первичного ключа (путем задания свойству IsPrimaryKey значения True). Ограничению назначается имя Constraint#, где # — это 1, 2, 3 и т. д. Например, имя первого ограничения по умолчанию — Constraint1;
ограничение внешнего ключа для дочерней таблицы, определяющее дополнительный столбец как внешний ключ, ссылающийся на первичный ключ родительской таблицы. Ограничение имеет имя ParentTable_ChildTable, где ParentTable — это имя родительской таблицы, а ChildTable — это имя дочерней таблицы;
связи данных между родительскими и дочерними таблицами.
В следующем примере показывается схема, где OrderDetail — это дочерний элемент таблицы 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>
Процесс сопоставления схемы XML создает в объекте DataSet:
Таблицы Order и OrderDetail.
Order(OrderNumber, EmpNumber, Order_Id) OrderDetail(OrderNo, ItemNo, Order_Id)
Ограничение уникальности на таблицу Order. Отметим, что свойство IsPrimaryKey имеет значение True.
ConstraintName: Constraint1 Type: UniqueConstraint Table: Order Columns: Order_Id IsPrimaryKey: True
Ограничение внешнего ключа на таблицу OrderDetail.
ConstraintName: Order_OrderDetail Type: ForeignKeyConstraint Table: OrderDetail Columns: Order_Id RelatedTable: Order RelatedColumns: Order_Id
Связь между таблицами Order и OrderDetail. Свойству Nested для данной связи устанавливается значение True, так как элементы Order и OrderDetail вложены в схему.
ParentTable: Order ParentColumns: Order_Id ChildTable: OrderDetail ChildColumns: Order_Id ParentKeyConstraint: Constraint1 ChildKeyConstraint: Order_OrderDetail RelationName: Order_OrderDetail Nested: True
См. также
Основные понятия
Формирование связей DataSet на основе схемы XML (XSD)
Другие ресурсы
Сопоставление ограничений схемы XML (XSD) с ограничениями DataSet