Подтвердить что ты не робот

Удаление объекта и всех его связанных объектов в Entity Framework

Кто-нибудь знает, как удалить объект и все связанные с ним объекты внутри EF без ручного перемещения графа объектов и удаления каждого из них?

Например, у меня есть SalesOrder и SalesOrderDetails с соотношением 1: N между ними. Когда я удаляю SalesOrder, я хочу, чтобы все SalesOrderDetails были удалены автоматически.

Возможно ли это в EF?

4b9b3361

Ответ 1

Вы не должны делать это в Entity Framework. Все популярные реляционные базы данных поддерживают ON CASCADE DELETE для внешних ключей, что также намного более эффективно. Я предлагаю вам просто пойти с этим.

Ответ 2

в этой статье, Алекс Джеймс (который публикует свой ответ), имеет полную статью по этой теме.

http://blogs.msdn.com/b/alexj/archive/2009/08/19/tip-33-how-cascade-delete-really-works-in-ef.aspx

EF отвечает за правильность объекта ObjectContext после SaveChanges(). Таким образом, EF пытается синхронизировать объект ObjectContext с ожидаемым состоянием базы данных после ожидаемого каскада в базе данных. Знак подсказки заключается в том, что если вы откроете что-то вроде SqlProfiler, , вы заметите, что EF выдаёт DELETE-запросы для зависимых объектов, о которых он знает (т.е. Загружается в ObjectContext) при удалении принципала.Существенно, что здесь происходит, что Entity Framework ожидает, что удаление принципала в базе данных удалит все его иждивенцы в базе данных. Поэтому он выдает, что должно быть, избыточный DELETE, чтобы запросить себя, чтобы уже загруженные иждивенцы были удалены из ObjectContext. Главное отметить, что EF не извлекает все зависимые объекты и не удаляет их: они удаляют только иждивенцы, которые уже находятся в памяти.