RavenDB如何刷新?

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

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

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

….

 using (var session = _dataDocumentStore.Instance.OpenSession() ) { return session.Query().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,然后检查它一直存在? 对此的任何建议都会很棒

基本上, 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 

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

在此处输入图像描述

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

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

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