RavenDB如何刷新?

Dan*_*ack 7 c# persistence flush ravendb

我正在使用RavenDb嵌入式.作为我整合测试的一部分,我想检查对象是否持久化.当我在一个对象上SaveChanges然后检索它时,除非我处理我的连接,否则找不到它.

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

 using (var session = _dataDocumentStore.Instance.OpenSession())
 {
         session.Store(file);
         session.SaveChanges();
 }
Run Code Online (Sandbox Code Playgroud)

....

using (var session = _dataDocumentStore.Instance.OpenSession() )
{
          return session.Query<File>().ToList();
}
Run Code Online (Sandbox Code Playgroud)

我创建了一个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();

        }
Run Code Online (Sandbox Code Playgroud)

你如何坚持RavenDB然后检查它是否一直存在?对此的任何建议都会很棒

Pur*_*ome 15

基本上,EmbeddableDocumentStore保存和索引新数据需要更长的时间,而不是保存和查询.

所以,当你的测试说: -

  1. 存储和SaveChanges.
  2. 加载.
  3. 这载入了吗?

负载比索引有时间完成更快地完成.

所以,就像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
Run Code Online (Sandbox Code Playgroud)

现在看看这个有效,请查看RavenOverflow @ github.并且该解决方案中的测试项目拥有您可能想要的所有爱:)

在此输入图像描述


Dan*_*ang 12

原因是,乌鸦指数过于陈旧,不能在这里返回一些东西.你需要这样做:

session.Query<File>()
    .Customize(x => x.WaitForNonStaleResultsAsOfLastWrite())
    .ToList();
Run Code Online (Sandbox Code Playgroud)

如需进一步阅读,请访问:http://ravendb.net/docs/client-api/querying/stale-indexes