Формирование связей DataSet на основе схемы XML (XSD)
В DataSet взаимосвязь между двумя или несколькими столбцами формируется путем создания отношения «родитель-потомок». Существует три способа представить связь элементов DataSet внутри схемы XSD.
Задайте вложенные сложные типы.
Используйте заметку msdata:Relationship.
Задайте xs:keyref без заметки msdata:ConstraintOnly.
Вложенные сложные типы
Определения вложенных сложных типов в схеме указывают на связь элементов по модели «родитель-потомок». В следующем фрагменте схемы XML показано, что элемент OrderDetail является дочерним по отношению к элементу Order.
<xs:element name="Order">
<xs:complexType>
<xs:sequence>
<xs:element name="OrderDetail" />
<xs:complexType>
</xs:complexType>
</xs:sequence>
</xs:complexType>
</xs:element>
Процесс сопоставления схем XML создает таблицы в наборе данных DataSet, соответствующие вложенным сложным типам в схеме. Он также создает дополнительные столбцы, которые используются как столбцы типа «родитель-потомок» в созданных таблицах. Обратите внимание, что эти столбцы «родитель-потомок» задают связи, которые отличаются от ограничений первичного/внешнего ключа.
Заметка msdata:Relationship
Заметка msdata:Relationship позволяет явно задать связь «родитель-потомок» между невложенными элементами схемы. В следующем примере показана структура элемента Relationship.
<msdata:Relationship name="CustOrderRelationship"
msdata:parent=""
msdata:child=""
msdata:parentkey=""
msdata:childkey="" />
Атрибуты заметки msdata:Relationship определяют элементы связи «родитель-потомок», элементы parentkey и childkey, а также атрибуты этой связи. Процесс сопоставления использует эти данные для создания таблиц в DataSet и связи «первичный/внешний ключ» между этими таблицами.
Например, следующий фрагмент схемы задает одноуровневые (не вложенные) элементы Order и OrderDetail. В схеме содержится заметка msdata:Relationship, которая указывает связь «родитель-потомок» между этими элементами. В этом случае необходимо явно задать связь с помощью заметки msdata:Relationship.
<xs:element name="MyDataSet" msdata:IsDataSet="true">
<xs:complexType>
<xs:choice maxOccurs="unbounded">
<xs:element name="OrderDetail">
<xs:complexType>
</xs:complexType>
</xs:element>
<xs:element name="Order">
<xs:complexType>
</xs:complexType>
</xs:element>
</xs:choice>
</xs:complexType>
</xs:element>
<xs:annotation>
<xs:appinfo>
<msdata:Relationship name="OrdOrdDetailRelation"
msdata:parent="Order"
msdata:child="OrderDetail"
msdata:parentkey="OrderNumber"
msdata:childkey="OrderNo"/>
</xs:appinfo>
</xs:annotation>
Процесс сопоставления использует элемент Relationship для создания связи «родитель-потомок» между столбцом OrderNumber в таблице Order и столбцом OrderNo в таблице OrderDetail в DataSet. Процесс сопоставления только указывает связь, он не задает автоматически ограничения значений в этих столбцах подобно ограничениям первичного/внешнего ключа в реляционных базах данных.
В этом разделе
Сопоставление неявных связей между вложенными элементами схемы (ADO.NET)
Описание ограничений и связей, неявно создаваемых в DataSet, если в схеме XML встречаются вложенные элементы.Сопоставление связей, указанных для вложенных элементов (ADO.NET)
Описание способов явной установки связей в DataSet для вложенных элементов схемы XML.Определение связей между невложенными элементами (ADO.NET)
Описание способов создания связей в DataSet между невложенными элементами схемы XML.
См. также
Выведение реляционной структуры DataSet из схемы XML (XSD)
Описание реляционной структуры (или схемы) DataSet, созданной из схемы XSD.Сопоставление ограничений схемы XML (XSD) с ограничениями DataSet
Описание элементов схемы XML, используемых для создания ограничений уникального и внешнего ключа в DataSet.