Создание связей между наборами данных в приложениях платформа .NET Framework
Примечание.
Наборы данных и связанные классы являются устаревшими технологиями платформа .NET Framework с начала 2000-х годов, которые позволяют приложениям работать с данными в памяти во время отключения приложений от базы данных. Технологии особенно полезны для приложений, которые позволяют пользователям изменять данные и сохранять изменения обратно в базу данных. Хотя наборы данных оказались очень успешными, мы рекомендуем новым приложениям .NET использовать Entity Framework Core. Entity Framework предоставляет более естественный способ работы с табличными данными в виде объектных моделей, и он имеет более простой интерфейс программирования.
Наборы данных, содержащие связанные таблицы данных, используют DataRelation объекты для представления связи родительского или дочернего между таблицами и возврата связанных записей друг с другом. Добавление связанных таблиц в наборы данных с помощью мастера настройки источника данных или конструктора наборов данных создает и настраивает DataRelation объект для вас.
Объект DataRelation выполняет две функции:
Он может сделать доступными записи, связанные с записями, с которыми вы работаете. Он предоставляет дочерние записи, если вы находитесь в родительской записи (GetChildRows) и родительской записи, если вы работаете с дочерней записью (GetParentRow).
Он может применять ограничения для целостности ссылочных элементов, например удаление связанных дочерних записей при удалении родительской записи.
Важно понимать разницу между истинным соединением и функцией DataRelation объекта. В истинном соединении записи извлекаются из родительских и дочерних таблиц и помещаются в один плоский набор записей. При использовании DataRelation объекта не создается новый набор записей. Вместо этого DataRelation отслеживает связь между таблицами и сохраняет родительские и дочерние записи в синхронизации.
Объекты и ограничения DataRelation
Объект DataRelation также используется для создания и применения следующих ограничений:
Уникальное ограничение, которое гарантирует, что столбец в таблице не содержит дубликатов.
Ограничение внешнего ключа, которое можно использовать для поддержания целостности ссылок между родительской и дочерней таблицей в наборе данных.
Ограничения, указанные в объекте DataRelation , реализуются автоматически путем создания соответствующих объектов или задания свойств. При создании ограничения внешнего ключа с помощью DataRelation объекта экземпляры ForeignKeyConstraint класса добавляются в DataRelation свойство объекта ChildKeyConstraint .
Уникальное ограничение реализуется либо путем простого задания Unique свойства столбца true
данных или добавления экземпляра UniqueConstraint класса в DataRelation свойство объекта ParentKeyConstraint . Сведения о приостановке ограничений в наборе данных см. в разделе "Отключение ограничений при заполнении набора данных".
Правила целостности ссылок
В рамках ограничения внешнего ключа можно указать правила целостности ссылок, применяемые в трех точках:
При обновлении родительской записи
При удалении родительской записи
При принятии или отклонении изменения
Правила, которые можно сделать, указываются в Rule перечислении и перечислены в следующей таблице.
Правило ограничения внешнего ключа | Действие |
---|---|
Cascade | Изменение (обновление или удаление) родительской записи также выполняется в связанных записях в дочерней таблице. |
SetNull | Дочерние записи не удаляются, но задается DBNullвнешний ключ в дочерних записях. С помощью этого параметра дочерние записи можно оставить как "потерянные", то есть они не имеют отношения к родительским записям. Примечание. Использование этого правила может привести к недопустимым данным в дочерней таблице. |
SetDefault | Внешний ключ в связанных дочерних записях имеет значение по умолчанию (как установлено свойством столбца DefaultValue ). |
None | Никакие изменения не вносятся в связанные дочерние записи. С помощью этого параметра дочерние записи могут содержать ссылки на недопустимые родительские записи. |
Дополнительные сведения об обновлениях в таблицах набора данных см. в разделе "Сохранение данных обратно в базу данных".
Связи только с ограничениями
При создании DataRelation объекта у вас есть возможность указать, что отношение используется только для принудительного применения ограничений, т. е. оно также не будет использоваться для доступа к связанным записям. Этот параметр можно использовать для создания набора данных, который немного эффективнее и содержит меньше методов, чем один с возможностью связанных записей. Однако вы не сможете получить доступ к связанным записям. Например, связь только с ограничением предотвращает удаление родительской записи, которая по-прежнему содержит дочерние записи, и невозможно получить доступ к дочерним записям через родительский элемент.
Создание отношения данных вручную в конструкторе наборов данных
При создании таблиц данных с помощью средств разработки данных в Visual Studio связи создаются автоматически, если данные можно собрать из источника данных. Если вы вручную добавляете таблицы данных на вкладке "Набор данных" панели элементов, может потребоваться вручную создать связь. Сведения о создании объектов программным способом см. в DataRelation разделе "Добавление dataRelations".
Связи между таблицами данных отображаются как строки в конструкторе наборов данных с ключом и бесконечностью глифа, отображающего аспект связи "один ко многим". По умолчанию имя связи не отображается в области конструктора.
Примечание.
Отображаемые на компьютере имена или расположения некоторых элементов пользовательского интерфейса Visual Studio могут отличаться от указанных в этой статье. Возможно, вы используете другой выпуск Visual Studio или разные параметры среды. Дополнительные сведения см. в разделе Персонализация среды IDE.
Создание связи между двумя таблицами данных
Откройте свой набор данных в Конструкторе наборов данных. Дополнительные сведения см. в пошаговом руководстве. Создание набора данных в конструкторе наборов данных.
Перетащите объект Relation из панели элементов DataSet в дочернюю таблицу данных в связи.
Откроется диалоговое окно "Отношение", заполняющее поле дочерней таблицы таблицей, в которую вы перетаскивали объект Relation.
Выберите родительскую таблицу в поле "Родительская таблица ". Родительская таблица содержит записи на стороне "один" связи "один ко многим".
Убедитесь, что правильная дочерняя таблица отображается в поле "Дочерняя таблица ". Дочерняя таблица содержит записи на стороне "многие" связи "один ко многим".
Введите имя связи в поле "Имя " или оставьте имя по умолчанию на основе выбранных таблиц. Это имя фактического DataRelation объекта в коде.
Выберите столбцы, которые объединяют таблицы в списках ключевых столбцов и внешних ключевых столбцов .
Выберите, следует ли создать отношение, ограничение или оба.
Выберите или снимите поле вложенного отношения . При выборе этого параметра свойство присваиваетсяNested, и это приводит к тому, что дочерние строки отношения будут вложены в родительский столбец, когда эти строки записываются как XML-данные или синхронизированы с XmlDataDocument.
true
Дополнительные сведения см. в разделе "Вложенные dataRelations".Задайте правила, которые будут применяться при внесении изменений в записи в этих таблицах. Дополнительные сведения см. в разделе Rule.
Нажмите кнопку "ОК" , чтобы создать связь. Линия отношения отображается в конструкторе между двумя таблицами.
Отображение имени отношения в конструкторе наборов данных
Откройте свой набор данных в Конструкторе наборов данных. Дополнительные сведения см. в пошаговом руководстве. Создание набора данных в конструкторе наборов данных.
В меню "Данные" выберите команду "Показать метки отношения", чтобы отобразить имя отношения. Снимите этот флажок, чтобы скрыть имя отношения.