删除实体框架中的对象及其所有相关实体

ado.net entity-framework

有没有人知道如何删除EF中的对象及其所有相关实体,而无需手动遍历对象图并删除每个对象?

例如,我有SalesOrder和SalesOrderDetails,它们之间的关系为1:N。当我删除SalesOrder时,我希望自动删除所有SalesOrderDetails。

这可能在EF吗?

一般承认的答案

您不应该在实体框架中执行此操作。所有流行的关系数据库都支持外键上的ON CASCADE DELETE ,这也是非常有效的。我建议你顺其自然。


热门答案

在这篇文章中,Alex Jamese(发表他的回答),有一篇关于这个主题的完整文章。

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

EF负责SaveChanges()之后ObjectContext的正确性。因此,EF尝试将ObjectContext与数据库中预期的级联之后的预期数据库状态同步。一个告诉我的问题是,如果你打开像SqlProfiler这样的东西, 你会注意到当删除一个主体时,EF发出了它所知道的依赖实体的DELETE请求(即在ObjectContext中加载的)。基本上,这里发生的是实体框架期望删除数据库中的主体,将删除数据库中的所有依赖项。所以它应该发出什么,应该是多余的DELETE来请求自己,以便从ObjectContext中删除已经加载的依赖项。需要注意的关键是EF 检索所有依赖实体并为它们发出删除:它只删除已经在内存中的依赖项。



许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因
许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因