2012-11-05 172 views
2

陶然成一個奇怪的問題與RavenDBRavendb Savechanges();需要很長時間才能運行?

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不包含我只是添加了存儲方法的模型。

但是,如果我在savechanges後添加一個Thread.Sleep(100)存儲模型包含在新列表中。

我是否存儲和保存的東西到RavenDB錯誤的方式?

我應該怎麼做?

當然,只需將傳入模型添加到newListOfModels並在例如basecontrollers onactionexecuted方法中運行SaveChanges之後解決。

我主要關心的是爲什麼我需要延遲線程才能查詢documentsession並在那裏找到我新添加的模型。

回答

6

RavenDB索引由於其本質而失效。 From the documentation

RavenDB在後臺線程中,每當新的數據進入或現有的數據被更新,其 執行時執行數據索引。 將此作爲後臺線程運行,即使大量數據發生更改,服務器也可以快速響應 ,但在該情況下,您可能會查詢過時的索引。

因此,當查詢等待索引被拒絕時,您需要告訴RavenDB。

您可以用各種WaitFor...定製做,你會最想的WaitForNonStaleResultsAsOfLastWrite選項:

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

謝謝。總是很高興學習關於這個真棒分貝的新東西 – Kimpo

相關問題