Наборы данных «ведущий-детализация»

вы можете создавать между ними

Как уже упоминалось, несколько таблиц в одном наборе данных — это нечто большее, чем просто коллекция таблиц. Вы можете создавать между ними родительско-дочерние отношения и добавлять ограничения первичных, уникальных и внешних ключей. Наборы данных, содержащие родительско-дочерние отношения такого рода, часто называют наборами данных «ведущий-детализация» , поскольку они обычно используются в таких сценариях привязки данных, где выбор строки в родительской таблице приводит к отображению всех ассоциированных дочерних строк. Метод в листинге Г.5 Снова извлекает обе таблицы Customers и Orders, используя на этот раз два отдельных адаптера данных, и создает между ними родительско-дочернее, или отношение ведущий-детализация. Установка для свойства MissedSchemaAction Адаптера данных значения AddWithKey Предписывает адаптеру при исполнении запроса дополнительно определить столбцы, образующие первичный ключ, и если таковые найдутся, он создаст соответствующие уникальные ограничения в результирующей таблице. Для создания отношения вам нужно специфицировать, какой столбец в родительской таблице является первичным ключом, а также соответствующий столбец внешнего ключа в дочерней таблице. Проще всего это сделать с использованием объектов DataColumn, Представляющих эти столбцы. При этом также неявно специфицируется, какая таблица является родительской, а какая дочерней, поскольку столбец может принадлежать лишь к одной таблице, альтернативно можно было бы специфицировать родительскую и дочернюю таблицы и столбцы по именам. Добавление отношения данных создает также соответствующее ограничение внешнего ключа, обеспечивающее выполнение правила, что если строка в дочерней таблице ссылается на строку в родительской таблице, то такая строка должна существовать. Обратите внимание, что код устанавливает также свойство Nested Отношения данных в True. Это влияет только на XML, если вы сохраняете набор данных вызовом WriteXml Или получаете его строковое представление при помощи GetXml. При этом дочерние строки будут выводиться как вложенные элементы под элементом родительской строки.