Удаляет ли удаление из БД LINQ записи в других таблицах, имеющих связь с внешним ключом? - PullRequest
0 голосов
/ 06 января 2010

Итак, в корне моей БД у меня есть таблица «Клиент». Внешние ключи у клиента находятся примерно в 6-7 других таблицах, таких как квитанции, адреса, документы и т. Д. Если бы я должен был удалить клиента с помощью SubmitChanges (), он бы отыскал все эти записи с ассоциацией внешнего ключа и удалил их тоже, или мне нужно сделать как 6 запросов?

Ответы [ 2 ]

2 голосов
/ 06 января 2010

Это произойдет, только если вы настроили таблицы базы данных для этого с каскадным удалением (т.е. on delete cascade).

Для получения дополнительной информации см. Операции вставки, обновления и удаления (LINQ to SQL) :

LINQ to SQL не поддерживает или распознавать операции каскадного удаления. Если вы хотите удалить строку в таблице что имеет ограничения против этого, вы должен либо установить ON DELETE CASCADE правило в ограничении внешнего ключа в базы данных, или используйте свой собственный код для сначала удалите дочерние объекты, которые предотвратить родительский объект от удален. В противном случае исключение выброшены.

0 голосов
/ 06 января 2010

Какие каскадные действия у вас есть в отношении этих внешних ключевых отношений?

По умолчанию большинство систем баз данных (включая SQL Server, который, я полагаю, вы используете) не будут иметь никаких «ON DELETE CASCADE» или каких-либо других действий - поэтому в этом случае ничего не произойдет.

Этот запрос T-SQL покажет вам ваши отношения с внешним ключом и будут ли определены какие-либо ссылочные действия DELETE или UPDATE:

SELECT
    name 'FK Constraint',
    OBJECT_NAME(parent_object_id) 'Parent table',
    OBJECT_NAME(referenced_object_id) 'Referenced table',
    delete_referential_action ,
    delete_referential_action_desc ,
    update_referential_action ,
    update_referential_action_desc 
FROM 
    sys.foreign_keys

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

См. Документы MSDN по Каскадные ограничения ссылочной целостности для получения более подробной информации.

...