我是RavenDb的绝对初学者,但在使用SQL的EF和存储库模式方面非常有经验。最后到处去尝试一下,所以我使用RavenDB.Embedded创建了一个简单的控制台应用程序,目的是在另一个应用程序上替换老化的SQLLite EF实现。RavenDb Stream不返回结果
无论如何,我试图写入超过1000条记录到商店,并简单地阅读与流。下面是一些示例代码:
var store = new EmbeddableDocumentStore
{
DataDirectory = "data"
};
store.Initialize();
using (IDocumentSession session = store.OpenSession())
{
for (var t = 1; t < 1000; t++)
{
var subtest = new Test
{
Id = new Guid(),
SubTest = new SubTest
{
Name = "NewTest",
Id = new Guid()
}
};
session.Store(subtest);
}
session.SaveChanges();
}
store
.DatabaseCommands
.PutIndex("SubTest/All",
new IndexDefinitionBuilder<SubTest>()
{
Map = tests => tests
.Select(test => new
{
SubTest = test.SubTest,
Id = test.Id
})
});
using (IDocumentSession session = store.OpenSession())
{
var query = session.Query<Test>("SubTest/All");
var listt = query.ToList();
using (var enumerator = session.Advanced.Stream(query))
{
while (enumerator.MoveNext())
{
var t = enumerator.Current.Document;
System.Console.WriteLine(t.Id);
}
};
}
System.Console.ReadLine();
我意识到这是很基本的,我没有那么多找人来纠正我的代码。只希望有人能帮助我理解索引事物应该如何与流一起工作,也许可以解释为什么枚举器没有结果。如果我使用.Load替代.Query,我会得到结果(其中128个),所以我很确定它的其余部分正在工作。
我试过上面的PutIndex的东西,但我也尝试过使用AbstractIndexCreationTask来处理类似的混淆结果。我真的很奇怪地找到关于这个在线的大量信息,这真的很少见吗?
一个有趣的事情需要注意这个样本,是第一次运行后,流不返回任何结果。根据我读过的内容,这是因为我刚刚添加的数据尚未编入索引,并且流不会等待索引。 – Brandon
PutIndex并创建AbstractIndexCreationTask可以做同样的事情:创建一个索引。我推荐后者。 –
原始示例没有返回任何项目,因为它们尚未建立索引。如果你等待索引是非陈旧的(即完成索引),那么你会得到结果。 (基本上你已经进入了RavenDB索引的最终一致性)。 – Michael