实体框架的 Remove 和 RemoveRange 有什么区别?

5

大家好,我是一个相对新手的Entity Framework使用者,想请教一下当尝试从上下文中删除数据时,哪种方式更好?

是通过传递集合使用.RemoveRange方法呢?还是自己编写循环并调用.Remove方法?

也许它们最终做的事情都一样,但我很想知道哪种更受欢迎?

1个回答

6

RemoveRange的添加主要是为了方便,但使用它可能会带来性能上的好处。以下内容来自CodePlex源代码:

请注意,如果DbContextConfiguration.AutoDetectChangesEnabled设置为true(默认情况下),则在删除任何实体之前将调用DetectChanges一次,并且不会再次调用。这意味着在某些情况下,RemoveRange可能比多次调用Remove更快。

如果您的上下文中跟踪了许多实体,则DetectChanges可能会导致性能问题。在循环中执行这么多次可能会影响性能。


1
谢谢@Dismissile,我觉得只需要进行一次调用似乎更容易,只是不确定为什么。 - NAJ
1
那你的意思是每次调用 Remove 都会执行 DetectChanges 吗?难道不应该只在 SaveChanges 之前执行吗? - Abdulkarim Kanaan
@AbdulkarimKanaan 是的,我直接从源代码中复制了那份文档。每次在DbSet上调用Remove时,DetectChanges都会被调用,以便更新其余的图形。 - Dismissile

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接