我有以下针对跳过训练的测试-
[Test]
public void RavenPagingBehaviour()
{
const int count = 2048;
var eventEntities = PopulateEvents(count);
PopulateEventsToRaven(eventEntities);
using (var session = Store.OpenSession(_testDataBase))
{
var queryable =
session.Query<EventEntity>().Customize(x => x.WaitForNonStaleResultsAsOfLastWrite()).Skip(0).Take(1024);
var entities = queryable.ToArray();
foreach (var eventEntity in entities)
{
eventEntity.Key = "Modified";
}
session.SaveChanges();
queryable = session.Query<EventEntity>().Customize(x => x.WaitForNonStaleResultsAsOfLastWrite()).Skip(0).Take(1024);
entities = queryable.ToArray();
foreach (var eventEntity in entities)
{
Assert.AreEqual(eventEntity.Key, "Modified");
}
}
}
PopulateEventsToRaven只是将2048个非常简单的文档添加到数据库中。
第一个跳过接取组合会获得前1024个文档,然后修改文档,然后提交更改。
下一个跳过合并组合再次想要获取前1024个文档,但是这次它获取的文档编号为1024到2048,因此无法通过测试。为什么会这样,我又希望第一个1024?
编辑:我已经证实,如果我不修改文档,行为就可以了。
最佳答案
问题是您没有指定订单依据,这意味着RavenDB可以自由选择要返回的项目,这些项目不一定要与上一次调用中返回的项目相同。
使用OrderBy,它将保持一致。
关于RavenDB分页行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7134963/