Удалить объект и все связанные с ним объекты в Entity Framework - PullRequest
26 голосов
/ 02 июня 2009

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

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

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

Ответы [ 2 ]

26 голосов
/ 02 июня 2009

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

7 голосов
/ 21 октября 2010

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

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), когда субъект удаляется. 1008 * По сути, здесь происходит то, что Entity Framework ожидает, что удаление принципала в базе данных приведет к удалению всех его зависимых элементов в базе данных. Таким образом, он выдает, что должно быть, избыточное DELETE для запроса самого себя, чтобы уже загруженные иждивенцы были удалены из ObjectContext. Ключевым моментом, на который следует обратить внимание, является то, что EF не извлекает все зависимые объекты и не удаляет их: он удаляет только те зависимости, которые уже находятся в памяти.

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