为什么RavenDb会话表明仅在查询后进行了更改?

时间:2016-03-11 23:42:21

标签: ravendb

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

执行上述代码段时,hasChanges0false,但hasChanges1entityHasChanged均为true。为什么会这样,因为只执行了一个查询而且实体还没有被修改?

1 个答案:

答案 0 :(得分:1)

我遇到了一些可以解释这种行为的情况。我不知道哪个适合。

数据在反序列化时会发生变化。当模型发生变化时,可能会发生这种情况,例如:添加或删除的属性。如果模型添加了一个新的字符串属性,那么数据会反正序化到模型中,但是下次序列化时,json会有所不同。

添加了元数据。我已经看到,如果对象“缺失”,则会将元数据添加到raven中。一些元数据。您可以看到,如果您通过HTTP API或raven studio向Raven添加对象,但不要添加该类型的元数据。最近还修复了一个错误,其中将查询相关性分数添加到元数据中。

吸气剂副作用像丹尼尔在评论中提到的那样,如果你的吸气剂有副作用或每次都没有返回相同的值,这可能会导致问题,那些应该转移到功能。

可能最简单的方法是找出正在发生的事情,让它将对象保存回来,然后比较之前和之后的数据和元数据。

希望有所帮助。