Поделиться через


Создание связей между наборами данных в приложениях платформа .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.

Создание связи между двумя таблицами данных

  1. Откройте свой набор данных в Конструкторе наборов данных. Дополнительные сведения см. в пошаговом руководстве. Создание набора данных в конструкторе наборов данных.

  2. Перетащите объект Relation из панели элементов DataSet в дочернюю таблицу данных в связи.

    Откроется диалоговое окно "Отношение", заполняющее поле дочерней таблицы таблицей, в которую вы перетаскивали объект Relation.

  3. Выберите родительскую таблицу в поле "Родительская таблица ". Родительская таблица содержит записи на стороне "один" связи "один ко многим".

  4. Убедитесь, что правильная дочерняя таблица отображается в поле "Дочерняя таблица ". Дочерняя таблица содержит записи на стороне "многие" связи "один ко многим".

  5. Введите имя связи в поле "Имя " или оставьте имя по умолчанию на основе выбранных таблиц. Это имя фактического DataRelation объекта в коде.

  6. Выберите столбцы, которые объединяют таблицы в списках ключевых столбцов и внешних ключевых столбцов .

  7. Выберите, следует ли создать отношение, ограничение или оба.

  8. Выберите или снимите поле вложенного отношения . При выборе этого параметра свойство присваиваетсяNested, и это приводит к тому, что дочерние строки отношения будут вложены в родительский столбец, когда эти строки записываются как XML-данные или синхронизированы с XmlDataDocument.true Дополнительные сведения см. в разделе "Вложенные dataRelations".

  9. Задайте правила, которые будут применяться при внесении изменений в записи в этих таблицах. Дополнительные сведения см. в разделе Rule.

  10. Нажмите кнопку "ОК" , чтобы создать связь. Линия отношения отображается в конструкторе между двумя таблицами.

Отображение имени отношения в конструкторе наборов данных

  1. Откройте свой набор данных в Конструкторе наборов данных. Дополнительные сведения см. в пошаговом руководстве. Создание набора данных в конструкторе наборов данных.

  2. В меню "Данные" выберите команду "Показать метки отношения", чтобы отобразить имя отношения. Снимите этот флажок, чтобы скрыть имя отношения.