为什么 EntityFramework 6 HasChanges 方法 return 当更改的 属性 值恢复为原始值时为真?

Why EntityFramework 6 HasChanges method return true when the changed property values are reverted back to original values?

        //Person.Name is "Peter"
        Person person = DbContext.People.Where(x => x.Id == 0).FirstOrDefault();
        bool b = DbContext.ChangeTracker.HasChanges(); //return false;
        person.Name = "Patrick";
        b = DbContext.ChangeTracker.HasChanges(); //return true;
        person.Name = "Peter";
        b = DbContext.ChangeTracker.HasChanges(); //expect false but return true;

根据上面的代码,我说一旦实体发生变化,dbcontext 的 changetracker 不会费心检查值是否已恢复,我说得对吗?

当您更改 属性 值时,EF DbContext 状态设置为已修改,因此如果您想要 return 未更改状态,您必须明确设置此:

DbContext.Entry(yourEntry).State = EntityState.Unchanged;

一个有用的question/answer是here