"WaitForNonStaleResults"のさまざまな味を使用しても、RavenDBが古くなっていることを確認したようです。完全機能サンプルコード(スタンドアローンテストとして書かれているので、コピー/ペーストしてそのまま実行できます)です。削除後にRavenDBが失効した結果を返す
public class Cart
{
public virtual string Email { get; set; }
}
[Test]
public void StandaloneTestForPostingOnStackOverflow()
{
var testDocument = new Cart { Email = "[email protected]" };
var documentStore = new EmbeddableDocumentStore { RunInMemory = true };
documentStore.Initialize();
using (var session = documentStore.OpenSession())
{
using (var transaction = new TransactionScope())
{
session.Store(testDocument);
session.SaveChanges();
transaction.Complete();
}
using (var transaction = new TransactionScope())
{
var documentToDelete = session
.Query<Cart>()
.Customize(x => x.WaitForNonStaleResultsAsOfLastWrite())
.First(c => c.Email == testDocument.Email);
session.Delete(documentToDelete);
session.SaveChanges();
transaction.Complete();
}
RavenQueryStatistics statistics;
var actualCount = session
.Query<Cart>()
.Statistics(out statistics)
.Customize(x => x.WaitForNonStaleResultsAsOfLastWrite())
.Count(c => c.Email == testDocument.Email);
Assert.IsFalse(statistics.IsStale);
Assert.AreEqual(0, actualCount);
}
}
WaitForNonStaleResultsのすべてのフレーバーを試しましたが、変更はありません。期限切れでない結果を待つことは、アップデートでうまくいくようですが、削除ではうまくいかないようです。私が試してみました
更新
いくつかの点:
アクションごとに別々のセッションを使用しました。結果:違いはありません。同じ成功と失敗。
最後のクエリの前に
Thread.Current.Sleep(500)
を配置します。結果:成功。スレッドを0.5秒間スリープさせると、カウントはゼロのように戻ってきます。
testDocumentはどこで宣言されていますか? documentToDeleteがnullではありませんか?セッションを閉じて新しいセッションでクエリを実行する必要がありますか? –
testDocumentは、関数の最初の行で初期化されます。新しいセッションに関しては、現在のクエリ結果を取得するために新しいセッションを開く必要はありませんが、いずれにしても私はすでにそれを試しています。私は、追加情報の観測を含むように投稿を編集する。 –
それは半分の睡眠が働くのは面白いです。私が考えることができる唯一のもう一つのことは、バグか、より良いインデックスが必要なことです。使用しているRavenDBのバージョンは何ですか? –