var hasChanges0 = db.Advanced.HasChanges; //false
var checkinsTest = db.Query<Checkin>().ToList();
var hasChanges1 = db.Advanced.HasChanges; //true
var entityHasChanged = db.Advanced.HasChanged(checkinsTest[0]); //true
执行上述代码段时,hasChanges0
为false
,但hasChanges1
和entityHasChanged
均为true
。为什么会这样,因为只执行了一个查询而且实体还没有被修改?
答案 0 :(得分:1)
我遇到了一些可以解释这种行为的情况。我不知道哪个适合。
数据在反序列化时会发生变化。当模型发生变化时,可能会发生这种情况,例如:添加或删除的属性。如果模型添加了一个新的字符串属性,那么数据会反正序化到模型中,但是下次序列化时,json会有所不同。
添加了元数据。我已经看到,如果对象“缺失”,则会将元数据添加到raven中。一些元数据。您可以看到,如果您通过HTTP API或raven studio向Raven添加对象,但不要添加该类型的元数据。最近还修复了一个错误,其中将查询相关性分数添加到元数据中。
吸气剂副作用像丹尼尔在评论中提到的那样,如果你的吸气剂有副作用或每次都没有返回相同的值,这可能会导致问题,那些应该转移到功能。
可能最简单的方法是找出正在发生的事情,让它将对象保存回来,然后比较之前和之后的数据和元数据。
希望有所帮助。