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


Общие сведения об иерархическом обновлении

Иерархическое обновление — это процесс сохранения обновленных данных (из набора данных двух или более связанных таблиц) обратно в базу данных с сохранением ограничения ссылочной целостности. Ссылочная целостность — это свод правил, обеспечиваемых ограничениями базы данных, которые управляют поведением вставки, обновления и удаления связанных записей. Например, именно ссылочная целостность требует создания записи клиента до создания заказов для этого клиента.

При создании разработчиками приложений в Visual Studio 2005 и в более ранних версиях автоматически созданный код сохранял измененные данные только в первую таблицу, перенесенную из окна Источники данных. При перетаскивании дополнительных таблиц из окна Источники данных пользователи вручную добавляли код для сохранения изменений в этих таблицах в базе данных. Пользователям требовалось не только добавлять код для вызова метода TableAdapter.Update для каждой таблицы, но необходимо было встроить и логику для выполнения конкретных вставок, обновлений и удалений в заданном порядке для каждой таблицы для предотвращения нарушения ссылочной целостности. (Например, новые клиенты должны быть сохранены до добавления их заказов, и заказы должны удаляться до удаления существующих клиентов.)

Начиная с Visual Studio 2008, типизированные наборы данных улучшены за счет нового компонента TableAdapterManager. TableAdapterManager уменьшает размер кода, требуемого для сохранения данных в нескольких связанных таблицах из нескольких процедур с несколькими строками кода, требуется вызов лишь одного метода — TableAdapterManager.UpdateAll(TypedDataset). TableAdapterManager предоставляет всю базовую логику, необходимую для сохранения ссылочной целостности данных во время операции обновления (сохранения) между наборами данных и базой данных. Дополнительные сведения см. в разделе Общие сведения о компоненте TableAdapterManager.

Включение иерархического обновления в наборе данных

По умолчанию иерархическое обновление включено для всех новых наборов данных, добавляемых в проект или созданных в проекте. Включение или выключение иерархического обновления происходит путем задания свойству Hierarchical Update типизированного набора данных в конструктор наборов данных значений true или false. Подробные сведения см. в разделе Практическое руководство. Разрешение и запрет иерархического обновления.

Ограничение внешнего ключа и каскадное обновление и удаление

Важно понимать, как ограничения внешнего ключа и каскадное поведения в базе данных создаются в коде сгенерированного набора данных.

По умолчанию таблицы данных в наборе данных создаются со связями (DataRelation), соответствующими связям в базе данных. Однако связь в наборе данных не создается в качестве ограничения внешнего ключа. DataRelation настроена как Только связь без UpdateRule или DeleteRule.

По умолчанию каскадное обновление и удаление выключены, даже если связь в базе данных задается с каскадным обновлением и/или удалением. Например, создание нового клиента и нового заказа и дальнейшая попытка сохранения данных может вызвать конфликт с ограничениями внешнего ключа, определенными в базе данных. Дополнительные сведения см. в разделе Практическое руководство. Настройка ограничений внешнего ключа в наборе данных.

Задание порядка выполнения обновлений

Задание порядка выполнения обновления задает порядок отдельных операций вставок, обновлений и удалений, требуемых для сохранения всех измененных данных во всех таблицах набора данных. При включении иерархического обновления операции вставки выполняются первыми, затем происходит обновление, и затем удаление. TableAdapterManager предоставляет свойство UpdateOrder, которое может быть задано для выполнения сначала Обновлений, потом Вставок и Удалений.

Примечание

Важно понимать, что порядок обновления действует на все операции.То есть при выполнении обновления вставки выполняются для всех таблиц в наборе данных, затем выполняются обновления для всех таблиц в наборе данных, и затем удаление.

Чтобы задать свойство UpdateOrder, после перетаскивания элементов с Окно "Источники данных" на форму нажмите кнопку TableAdapterManager на табло компонентов и установите свойство UpdateOrder в окне Свойства. Дополнительные сведения см. в разделе Практическое руководство. Установка порядка выполнения иерархического обновления.

Создание резервной копии набора данных до выполнения иерархических обновлений

При сохранении данных (путем вызова метода TableAdapterManager.UpdateAll()) TableAdapterManager пытается обновить данные для каждой таблицы в одной транзакции. При сбое обновления для любой таблицы происходит откат всей транзакции. В большинстве случаев откат транзакции возвращает приложению исходное состояние. Однако иногда может потребоваться восстановить набор данных на основе резервной копии. Примером может служить использование значений с автоматическим приращением. Например, если операция сохранения не выполнена успешно, значения автоприращения в наборе данных не сбрасываются, и набор данных будет продолжать создавать значения с автоматическим приращением, оставляя разрыв в нумерации, что может оказаться недопустимым для приложения. В ситуациях, где это важно, TableAdapterManager предоставляет свойство BackupDataSetBeforeUpdate, заменяя существующий набор данных резервной копией при сбое транзакции.

Примечание

Во время выполнения метода TableAdapterManager.UpdateAll резервные копии находятся только в памяти.Следовательно, не существует программного доступа к этому резервному набору данных, так как он заменяет исходный набор данных либо выходит за область действия сразу же после завершения работы метода TableAdapterManager.UpdateAll.

См. также

Задачи

Пошаговое руководство. Сохранение данных связанных таблиц данных (иерархическое обновление)

Основные понятия

Новые возможности разработки приложений для работы с данными

Общие сведения о компоненте TableAdapterManager

Другие ресурсы

Сохранение данных

Иерархическое обновление