2
我有NHibernate的緩存對象的問題,並返回舊版本:NHibernate的緩存問題
這裏是我的代碼的運行
public IList<Foo> GetFoos()
{
return _session.Query<Foo>().Where(f => f.State == 0).ToList();
}
public void Update(Foo foo)
{
foo.State = 1;
_session.Transaction.Begin();
_session.Update(foo);
_session.Transaction.Commit();
}
如果我在數據庫中有10個FOOS狀態0我打電話給GetFoos
我得到10個Foo對象,狀態爲0,那很好。
如果我在每個Foo上調用Update
數據庫會顯示狀態1中的10個foos,那很好。
現在,如果我打電話GetFoos
我得到0美孚對象,這很棒。
如果外部應用程序將所有Foos的狀態更改爲狀態0,並且運行GetFoos
方法,則返回10個對象,這很好。然而,所有的對象都處於1 !!!!!!狀態,這太可怕了!
現在,如果我在所有foos上調用Update,數據庫不會更新,因爲Nhibernate認爲沒有任何更改,所以它們永遠保持在數據庫中的狀態0。
我的配置有問題嗎,還是這種預期的行爲? 如何讓對象返回正確的新值?
感謝
我不明白爲什麼如果它使用它的緩存GetFoos方法將返回任何東西,至少返回沒有任何意義。目前,具有表達式'.Where(f.State == 0)'的方法將返回帶有'f.State = 1'的對象。 Nhibernate是否每次都在數據庫上運行查詢,但是從緩存中返回值? –