gpt4 book ai didi

c# - RavenDB如何刷新?

转载 作者:太空狗 更新时间:2023-10-29 19:50:24 25 4
gpt4 key购买 nike

我正在使用嵌入式 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 需要更长的时间来保存和索引新数据。

所以当你的测试说:-

  1. 存储和保存更改。
  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。该解决方案中的测试项目拥有您可能想要的所有爱。

关于c# - RavenDB如何刷新?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9181204/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com