Обеспечение целостности базы данных при добавлении и удалении - PullRequest
0 голосов
/ 15 мая 2010

Поскольку я разрабатываю свою базу данных, я работаю над обеспечением целостности данных. Так, например, Книга должна быть удалена, когда ее Автор удален из базы данных (но не наоборот), предполагая одного автора.

Когда я настраивал внешний ключ, я настраивал CASCADE, поэтому я чувствую, что это должно произойти автоматически, если я выполню удаление из LINQ. Это правда? Если нет, нужно ли мне выполнять все удаления самостоятельно или как это сделать?

Мой второй вопрос, который связан с этим, заключается в следующем: обеспечивает ли база данных всю необходимую информацию для строки, когда я добавляю ее в таблицу (например, я не могу добавить книгу, которая не у меня нет автора), или мне нужно самому убедиться в этом в бизнес-логике? Что произойдет, если я попытаюсь сделать это с помощью LINQ to SQL? Получу ли я исключение?

Спасибо за помощь.

Ответы [ 2 ]

1 голос
/ 15 мая 2010

Похоже, что для второго вопроса вы можете быть заинтересованы в использовании транзакции. Например, вам нужно добавить несколько объектов в базу данных и убедиться, что все они добавлены или отсутствуют. Это то, что выполняет транзакция базы данных. И, да, вы должны сделать это на уровне данных / бизнеса, вы можете сделать это, добавив частичный класс в ваши классы datacontext. Если ваш бизнес-процесс утверждает, что, например, КАЖДЫЙ пользователь ДОЛЖЕН иметь АДРЕС или что-то в этом роде. Это соответствует вашему сценарию.

LINQ автоматически использует транзакции, если вы находитесь в пределах одного (использования), т. Е. Вы выполняете все за один шаг.

Если вам нужно выполнить несколько шагов или объединить с действием базы данных, не относящимся к LINQ, вы можете использовать область транзакции. Вам необходимо включить СЕРВИС РАСПРЕДЕЛЕННОЙ СДЕЛКИ. Это позволяет проводить транзакции, например, между файлами и базой данных.

См. TransactionScope

using (TransactionScope scope = new TransactionScope())
{
do stuff here
scope.Complete
}
1 голос
/ 15 мая 2010

Каскадный внешний ключ будет автоматически каскадно удалять вас.

Ссылочная целостность будет обеспечиваться базой данных; в этом случае вы должны сначала добавить автора, а затем книгу. Если вы нарушите ссылочную целостность, вы получите исключение.

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