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

时间:2009-06-01 22:33:52

标签: entity-framework ado.net

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

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

这可能在EF吗?

2 个答案:

答案 0 :(得分:26)

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

答案 1 :(得分:7)

在这篇文章中,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 检索所有依赖实体并为它们发出删除:它只删除已经在内存中的依赖项。