Ответ 1
Вы не должны делать это в Entity Framework. Все популярные реляционные базы данных поддерживают ON CASCADE DELETE
для внешних ключей, что также намного более эффективно. Я предлагаю вам просто пойти с этим.
Кто-нибудь знает, как удалить объект и все связанные с ним объекты внутри EF без ручного перемещения графа объектов и удаления каждого из них?
Например, у меня есть SalesOrder и SalesOrderDetails с соотношением 1: N между ними. Когда я удаляю SalesOrder, я хочу, чтобы все SalesOrderDetails были удалены автоматически.
Возможно ли это в EF?
Вы не должны делать это в Entity Framework. Все популярные реляционные базы данных поддерживают ON CASCADE DELETE
для внешних ключей, что также намного более эффективно. Я предлагаю вам просто пойти с этим.
в этой статье, Алекс Джеймс (который публикует свой ответ), имеет полную статью по этой теме.
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 не извлекает все зависимые объекты и не удаляет их: они удаляют только иждивенцы, которые уже находятся в памяти.