Entity Framework DeleteObject дочерний - PullRequest
       3

Entity Framework DeleteObject дочерний

2 голосов
/ 01 сентября 2009

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

1 Ответ

8 голосов
/ 01 сентября 2009

Если в базе данных сконфигурирован каскад, достаточно удалить принцип.

Вы можете сделать это без запроса к базе данных, чтобы получить объект, который будет удален, используя объекты-заглушки, как это:

var stub = new Principal{ID = idToDelete};
ctx.AttachTo("PrincipalsEntitySetName", stub);
ctx.DeleteObject(stub);

Конечно, это не вся история, если есть ссылки или поля, используемые для проверок параллелизма, они вам тоже понадобятся.

Если, с другой стороны, у вас есть только каскадное удаление в модели (т.е. в базе данных нет каскада), вам нужно сначала получить ВСЕ зависимости в памяти, а затем вызвать delete:

var stub = new Principal{ID = idToDelete};
ctx.AttachTo("PrincipalsEntitySetName", stub);
stub.Dependendents.Load();
ctx.DeleteObject(stub);

Это работает только потому, что EF выдает (что ожидается) избыточные удаления, чтобы синхронизировать ObjectContext с тем, что ожидается в базе данных.

Надеюсь, это поможет

Alex

PS У меня есть несколько советов на эту тему в моем блоге MSDN. Извлеките tip 33 (каскадное удаление) и tip 26 (заглушки)

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