有没有人知道如何在EF中删除一个对象及其所有相关实体,而不必手动遍历对象图并逐个删除?
例如,我有一个SalesOrder和SalesOrderDetails之间有1:N关系的模型。当我删除一个SalesOrder时,我希望所有的SalesOrderDetails都能自动删除。
这在EF中是否可行?
有没有人知道如何在EF中删除一个对象及其所有相关实体,而不必手动遍历对象图并逐个删除?
例如,我有一个SalesOrder和SalesOrderDetails之间有1:N关系的模型。当我删除一个SalesOrder时,我希望所有的SalesOrderDetails都能自动删除。
这在EF中是否可行?
你不应该在Entity Framework中这样做。所有流行的关系型数据库都支持外键的ON CASCADE DELETE
,这种方法更加高效。我建议你使用它。
在这篇文章中,Alex Jamese(发布了他的答案)对这个主题进行了完整的阐述。
在SaveChanges()之后,EF负责ObjectContext的正确性。因此,EF试图将ObjectContext与预期的数据库状态同步,以及数据库中预期的级联。 这是一个明显的迹象,如果你打开像SqlProfiler这样的东西,你会注意到EF正在为它知道的依赖实体(即已经加载在ObjectContext中的实体)发出DELETE请求,当一个主体被删除时。 本质上,这里发生的事情是,实体框架期望在数据库中删除主体时,将删除数据库中的所有从属。因此,它发出了一个应该是多余的DELETE请求,以便从ObjectContext中删除已经加载的从属。 需要注意的关键一点是,EF 不会检索所有相关实体并为它们发出删除指令:它只删除已经在内存中的从属。