【问题标题】:Ravendb Savechanges(); taking too long time to run?Ravendb Savechanges();运行时间太长?
【发布时间】:2012-11-05 17:54:41
【问题描述】:

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 onactionexecuted 方法之后运行 SaveChanges。

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

【问题讨论】:

    标签: c# asp.net-mvc-3 ravendb


    【解决方案1】:

    RavenDB 索引本质上是陈旧的。 From the documentation:

    RavenDB 在后台线程中执行数据索引,即 每当新数据进入或现有数据更新时执行。 将此作为后台线程运行允许服务器响应 即使在大量数据发生变化的情况下也很快,但是在那个 如果您可能查询过时的索引。

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

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

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

    【讨论】:

    • 谢谢。总是很高兴学习关于这个很棒的数据库的新东西
    猜你喜欢
    • 1970-01-01
    • 2016-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-11
    • 1970-01-01
    相关资源
    最近更新 更多