我是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