Ravendb Savechanges();花太长时间跑?

时间:2012-11-05 17:54:41

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

使用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的东西吗?

我该怎么做?

当然,只需将传入模型添加到newListOfModel并运行SaveChanges,例如在basecontrollers onactionexecuted方法中,就可以解决这个问题。

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

1 个答案:

答案 0 :(得分:6)

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

  

RavenDB在后台线程中执行数据索引,即   每当有新数据进入或现有数据更新时执行。   将此作为后台线程运行允许服务器响应   即使大量数据发生了变化,也很快就会发生变化   你可以查询陈旧的索引。

因此,在查询等待索引被重写时,需要告诉RavenDB。

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

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