我正在使用嵌入式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中持久保存,然后检查它是否已经持久保存?关于此的任何建议都很棒
基本上,EmbeddableDocumentStore
花费的时间和保存[的新数据要比保存和查询要长。
加载完成的速度比建立索引所需的时间快得多。
但是,您必须在代码中对要检查的
每个
查询执行此操作。所以,让我们作弊(合法):)这里是如何告诉文档存储始终等待过时的结果,如果有人查询存储的话:// 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项目拥有您可能想要的所有爱。
session.Query<File>()
.Customize(x => x.WaitForNonStaleResultsAsOfLastWrite())
.ToList();
要进一步阅读,请转到此处:http://ravendb.net/docs/client-api/querying/stale-indexes