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

Kim*_*mpo 2 c# ravendb asp.net-mvc-3

与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);
}
Run Code Online (Sandbox Code Playgroud)

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

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

我是以错误的方式存储和保存到RavenDB的东西吗?

我该怎么做?

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

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

nem*_*esv 6

RavenDB索引本质上是陈旧的.从文档:

RavenDB在后台线程中执行数据索引,每当新数据进入或现有数据更新时执行.将此作为后台线程运行允许服务器即使在大量数据发生更改时也能快速响应,但在这种情况下,您可以查询过时索引.

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

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

var newListOfModels = RavenSession
    .Query<RandomModel>()
    .Customize(x => x.WaitForNonStaleResultsAsOfLastWrite()).ToList();
Run Code Online (Sandbox Code Playgroud)