Удалить объект и все его дочерние объекты в Entity Framework? - PullRequest
2 голосов
/ 23 февраля 2011

Я пытался найти ответ на этот вопрос здесь.Некоторые люди, кажется, спрашивают подобные вещи, но я не получаю ответы.У меня есть сущность EF с кучей дочерних сущностей (отношение один ко многим).Я хочу иметь возможность удалить «родительскую» сущность и удалить все дочерние сущности одновременно.

Некоторые люди упоминают, что «Каскадное удаление» должно быть установлено как для модели EF, так и для базы данных (Sql Server вмое дело).Проблема в следующем:

  1. Я абсолютно не знаю, как это сделать (кажется, подразумевается в тех ответах, которые вы должны знать, но извините ...)
  2. У меня естьЯ чувствовал, что раньше сталкивался с подобными проблемами и где-то нашел ответ, который был бы проще, чем установка этого каскадного удаления.Я могу ошибаться, может быть, это единственный путь, но если есть более простое решение, которое я хотел бы знать.

В любом случае, ясным примером того, как добиться этой работы, будетс благодарностью!

Ответы [ 2 ]

5 голосов
/ 23 февраля 2011

В SQL Managment Studio зайдите в свою базу данных и найдите таблицу, где должен быть внешний ключ. Добавьте внешний ключ к таблице, указывающей на другую таблицу. Я полагаю, вы знаете, как настроить внешний ключ. В настройке внешнего ключа в нижней части диалогового окна вы увидите свойство Delete. Установите его в Каскад. Это приведет к удалению любых зависимых строк при удалении родительской строки. Затем перейдите и обновите модель данных в Visual Studio. Все должно быть настроено для вас сейчас.

0 голосов
/ 14 апреля 2011

Вот некоторая соответствующая документация на MSDN.Обратите внимание, что в этом примере, похоже, произошла ошибка.При использовании этой конфигурации я получил следующую ошибку от дизайнера EDMX.

Операции нельзя указывать на концах с кратностью '*'.

Необходимо установить свойство OnDeleteCascade для конца будет вызывать удаления на другом конце.

Например, в отношениях с клиентами и заказами, где вы хотите удалить заказы клиента вместе с клиентом, вы должны установитьСвойство OnDelete для роли Customer в Cascade.

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

...