Удалить Cascade без явной ссылки на все зависимости - PullRequest
0 голосов
/ 25 октября 2011

Я создаю небольшое приложение db-cleaner для базы данных сервера QA sql.Естественно, мне нужно удалить строки таблицы с зависимостями от них.

Возможности каскадирования T-SQL очень ограничены, поэтому я попытался использовать NHibernate для упрощения.Но единственный способ, который я нашел для этого, - создать коллекцию для каждой зависимости в объекте для удаления и пометить это как cascade = delete.

Это означает создание многих, многих коллекций (как вфайл hbm и в объекте C #), который мне не нужен ни для каких других целей.Что делает этот метод таким же сложным, как использование SQL.

Я что-то упустил?Есть ли более простой, более общий способ выполнения delete-cascade?

Спасибо.

РЕДАКТИРОВАТЬ: Просто для ясности, я избегаю изменения внешних ключей в БД, потому что это БД QA, разработанная, чтобы быть идентичной производственной БД.

Ответы [ 2 ]

0 голосов
/ 26 октября 2011

Я полагаю, у вас есть внешние ключи, определенные между связанными таблицами в вашей базе данных?На уровне внешнего ключа можно указать, что должно происходить со связанными записями при удалении родительской записи.
Проверьте MSDN для параметров каскадирования и как их определить:

Каскадный FKограничения

ограничения внешнего ключа

0 голосов
/ 26 октября 2011

В конце концов я нашел общий способ удаления:

Этот парень написал рекурсивный SP, который делает всю работу за вас:

http://www.sqlteam.com/article/performing-a-cascade-delete-in-sql-server-7

Нужно немного доработать (так как моя БД использует схемы), но работает как шарм.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...