实体框架中的DetectChange和ChangeTracking之间的区别

时间:2016-03-29 18:29:06

标签: c# entity-framework

我正在MSDN上阅读此topic

任何人都可以解释一下,这两者之间的区别是什么

  

DetectChanges 用于检测DBContext和相关实体中的更改

  

ChangeTracking 也可用于检测实体中的更改,如link

中所述
请告诉我两个人之间的实际差异。

1 个答案:

答案 0 :(得分:1)

因此,EF需要检测您对上下文所做的更改,例如添加\ modification \ removed实体。实体可能是普通的POCO实体,因此没有嵌入行为来跟踪其属性的更改。因此,EF应该对从数据库接收的实体进行快照,然后将此数据库快照与上下文的实际状态进行比较。更多 - EF应跟踪上下文中对象之间的关系并使它们保持同步。所有这些都是通过名为DetectChanges()的方法完成的。它在不同的时刻被调用,最重要的是当你调用SaveChanges时,以及当你将\ remove \ attach实体添加到上下文时等等。

如果您以特殊方式设计实体类(所有属性虚拟,ICollection代表的集合等) - 您可以使用自动更改跟踪。 EF将创建从您的实体类继承的特殊代理类,并将使用它直接检测您的实体属性的更改。请注意,在这种情况下仍然使用DetectChanges,完全如上所述。但是它执行的工作量较少,因为大多数更改都已在发生时立即检测到。

摘要:DetectChanges是一种执行基于快照的更改检测的方法(以及更多),是实体框架用于跟踪(检测)上下文更改的一组方法的一部分。在此处阅读有关DetectChanges的更多信息:http://blog.oneunicorn.com/2012/03/10/secrets-of-detectchanges-part-1-what-does-detectchanges-do/

相关问题