Проверка нарушения правила ссылочной целостности перед удалением - PullRequest
3 голосов
/ 06 июня 2009

Перед удалением строки из таблицы, есть ли простой способ проверить, не нарушит ли она правило ссылочной целостности? Я хотел бы сделать это из приложения формы C # win (.Net 3.5) с использованием SQL Server 2005.

Ответы [ 2 ]

1 голос
/ 06 июня 2009

Есть несколько потенциальных вариантов, которые приходят на ум:

  • Настройка каскадного удаления в базе данных, чтобы удаление всегда было успешным.
  • Проверьте связанные записи с помощью SELECT перед удалением. Для этого необходимо, чтобы приложение знало ограничения.
  • Хорошая модель предметной области (бизнес-классы) должна позволять приложению знать о связанных записях.
  • O / R Mapper, такой как NHibernate, может использоваться для определения операций каскадного удаления.
  • Используйте SMO (Microsoft.SqlServer.Smo), чтобы проверить схему базы данных на предмет связей, а затем проверить существующие связанные записи. Я не знаю, возможно ли это.
1 голос
/ 06 июня 2009

Вы можете выполнить удаление внутри транзакции:

try
{
  begin transaction
  delete row
}
catch SQLException
{
  if SQL error indicates referential integrity violation
    throw ReferentialIntegrityViolationException
}
finally
{
  rollback transaction
}

(при условии, что вы никогда не хотите, чтобы удаление происходило в этот момент в вашем коде)

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