RavenDB如何刷新?

问题描述 投票:7回答:2

我正在使用嵌入式RavenDb。作为集成测试的一部分,我要检查对象是否持久。当我在对象上保存更改,然后对其进行检索时,除非我处理连接,否则将找不到该对象。

这对我不起作用,因为没有文件返回

 using (var session = _dataDocumentStore.Instance.OpenSession())
 {
         session.Store(file);
         session.SaveChanges();
 }

....

using (var session = _dataDocumentStore.Instance.OpenSession() )
{
          return session.Query<File>().ToList();
}

我创建了一个Flush方法,该方法可以处理并重新创建一个可以正常工作的EmbeddableDocumentStore,但是由于这有点感觉,所以我可能会以错误的方式进行操作:

  public static IDocumentStore Initialize()
        {
            instance = new EmbeddableDocumentStore
            {
                DataDirectory = "App_Data/Database",
                UseEmbeddedHttpServer = true,


            };

            instance.Initialize();
            return instance;
        }

        public void Flush()
        {
            instance.Dispose();
            Initialize();

        }

您如何在RavenDB中持久保存,然后检查它是否已经持久保存?关于此的任何建议都很棒

c# persistence ravendb flush
2个回答
15
投票

基本上,EmbeddableDocumentStore花费的时间和保存[的新数据要比保存和查询要长。

所以当您的测试说:-

    存储并保存更改。
  1. 加载。
  2. 此负载吗?
  • 加载完成的速度比建立索引所需的时间快得多。

  • 所以,正如Daniel Lang所说,您需要等待过时的结果。

    但是,您必须在代码中对要检查的

    每个

    查询执行此操作。所以,让我们作弊(合法):)这里是如何告诉文档存储始终等待过时的结果,如果有人查询存储的话:

    // Initialise the Store. var documentStore = new EmbeddableDocumentStore { RunInMemory = true }; documentStore.Initialize(); // Force query's to wait for index's to catch up. Unit Testing only :P documentStore.RegisterListener(new NoStaleQueriesListener()); .... #region Nested type: NoStaleQueriesListener public class NoStaleQueriesListener : IDocumentQueryListener { #region Implementation of IDocumentQueryListener public void BeforeQueryExecuted(IDocumentQueryCustomization queryCustomization) { queryCustomization.WaitForNonStaleResults(); } #endregion } #endregion

    现在要查看实际效果,请查看RavenOverflow @ Github。该解决方案中的Tests项目拥有您可能想要的所有爱。

    12
    投票
    原因是,乌鸦索引太陈旧,无法在此处返回内容。您需要这样做:

    session.Query<File>() .Customize(x => x.WaitForNonStaleResultsAsOfLastWrite()) .ToList();

    要进一步阅读,请转到此处:http://ravendb.net/docs/client-api/querying/stale-indexes
    © www.soinside.com 2019 - 2024. All rights reserved.