私はRavenDbの初心者ですが、SQLを使用してEFやリポジトリパターンを経験しました。最後に試してみるために、RavenDB.Embeddedを使って簡単なコンソールアプリケーションを作成し、別のアプリケーションでエージングされたSQLLite EF実装を置き換えることにしました。RavenDbストリームは結果を返しません
とにかく、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();
私はこれはかなり初歩的であると認識し、私はそんなに私のコードを修正するために誰かを探していません。誰かが、インデックスのものがストリームでどのように動作するのかを理解するのを助けて、なぜ列挙子に結果がないのかを説明することができれば嬉しいです。 .Queryの代わりに.Loadを使用すると結果が得られます(そのうちの128個)ので、残りの部分は動作していることは間違いありません。
私は上記のPutIndexのことを試しましたが、同様の混乱した結果でAbstractIndexCreationTaskを試みました。私は本当に不思議なことに、このオンラインに関する多くの情報を実際に見つけることはできません。これは本当に珍しいことですか?
一つ面白いことを、初めてその実行することを、ストリームは結果を返しませんです。私が読んだところに基づいて、これは、私が今追加したデータはまだ索引付けされておらず、ストリームは索引付けを待っていないからです。 – Brandon
PutIndexとAbstractIndexCreationTaskを作成することは同じことを行います:インデックスを作成します。私は後者をお勧めします。 –
元の例は、まだ索引付けされていないため、項目を戻しません。インデックスが期限切れでない(つまりインデックスを終了する)まで待っていると、結果が得られます。 (基本的には、RavenDBインデックスの最終的な一貫性が保たれています)。 – Michael