RavenDB分页行为

标签 ravendb

我有以下针对跳过训练的测试-

    [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/

相关文章:

.net - RavenDb 在没有过滤条件时跳过项目

c# - RavenDB - 为什么IAsyncDocumentSession中没有DeleteAsync方法

design-patterns - 文档数据库 - 非规范化引用 - 最佳实践

raspberry-pi - 在 Raspberry Pi 上安装 Ravendb

arrays - Ravendb 数组相交

c# - 如何检查 RavenDB 中是否存在表(实体)

C# - 没有带有动态对象建议的 SQL 数据库

c# - Esent 和 Ravendb 中的 .Net 终结器顺序/语义

c# - RavenDb 4.0 - 来自 Raven.Abstractions 的 RavenJValue

azure - [kernel32.dll]RavenDb 嵌入式备份期间 Azure 网站上的 CreateHardLink 失败并显示 "Cannot create a file when that file already exists"