gpt4 book ai didi

c# - Ravendb Savechanges();运行时间太长?

转载 作者:行者123 更新时间:2023-12-02 18:20:22 30 4
gpt4 key购买 nike

RavenDB 遇到一个奇怪的问题

public ActionResult Save(RandomModel model)
{
//Do some stuff, validate model etc..

RavenSession.Store(model);
RavenSession.SaveChanges();


var newListOfModels = RavenSession.Query<RandomModel>().ToList();
return View("randomview",newListOfModels);
}

newListOfModels 不包含我刚刚使用 store 方法添加的模型。

但是,如果我在 savechanges 之后添加 Thread.Sleep(100),则存储的模型将包含在新列表中。

我是否以错误的方式存储和保存内容到 RavenDB?

我应该怎么做?

当然,有一种解决方法,只需将传入模型添加到 newListOfModels 中,然后在 Basecontrollers onactionexeculated 方法中运行 SaveChanges 即可。

我主要关心的是为什么我需要延迟线程才能查询文档 session 并在那里找到我新添加的模型。

最佳答案

RavenDB 索引本质上是过时的。 From the documentation :

RavenDB performs data indexing in a background thread, which is executed whenever new data comes in or existing data is updated. Running this as a background thread allows the server to respond quickly even when large amounts of data have changed, however in that case you may query stale indexes.

所以在查询时需要告诉RavenDB等待索引被重新刷新。

您可以使用各种 WaitFor... 自定义,您很可能需要 WaitForNonStaleResultsAsOfLastWrite 选项:

var newListOfModels = RavenSession
.Query<RandomModel>()
.Customize(x => x.WaitForNonStaleResultsAsOfLastWrite()).ToList();

关于c# - Ravendb Savechanges();运行时间太长?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13237621/

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