Entity Framework 如何跟踪对象的变化?即使调用通过方法,也很清楚,但它如何跟踪我们收到的对象、进行更改并调用 save 方法?他们说,事实上,我们在自己的课堂上录制。例如:
using(UserContext db = new UserContext())
{
db.Users.Where(w=>w.Id==3).First().Name="Ivan";
db.SaveChanges();
}
附言 在示例中,我们得到了一个 ID 等于 3 的用户并更改了他的名字。EF 是如何跟踪变化的?您如何自己跟踪元素?
我看了看医生。通常,EF 只是保留所有对象的“快照”,然后对照此“快照”检查所有“附加”对象以查找更改。
自动变化检测
使用实体状态
EF 在每个对象上创建一个包装器(代理)。此代理包含其他属性,其中之一是实体的状态 ( EntityState )。它还包含实体的当前值和以前的值。
在伪代码中它看起来像这样:
当我们添加、删除或更改实体时,这些属性会相应更改。
当一个方法
SaveChanges被调用时,会发生这样的事情:同样,这是伪代码。事实上,一切都有些复杂。