我想知道下面的這NHibernate的代碼可能會失敗什麼情況:NHibernate的不撿改變
var session = NHibernateSessionManager.CurrentSession;
var foo = session.Linq<Foo>.ToList()[0];
foo.SomeProperty = "test";
session.SaveOrUpdate(foo);
var reloadedFoos = session.Linq<Foo>
.Where(x => x.SomeProperty == "test");
Assert.That(reloadedFoos.Count > 0);
斷言語句總是失敗。
如果我在SaveOrUpdate後手動調用session.Flush,然後選擇查詢成功,但我認爲我們不必手動調用flush?這是我的理解,NHibernate應該足夠聰明,以實現Foo已更新,所以第二個選擇查詢應該成功。
看着生成的SQL,它顯示第二個選擇查詢的SQL在第一個SaveOrUpdate的sql之前執行。
事實上,如果我包住整個方法在一個事務中,那麼它成功:
using(NHibernateSessionManager.CurrentSession.BeginTransaction()
{
// Same code as above
}
現在SaveOrUpdate的SQL將Linq.Where SQL前執行。這有點奇怪,因爲我不必在兩者之間進行交易。
這是怎麼回事?
我覺得你的問題是誤導。我對NHibernate的工作模式單元有了一些想知道的知識,關於將變更與數據庫同步。你介意澄清一下嗎? – 2009-09-21 05:12:29
真的所有我想要的是上面的測試成功:我希望能夠保存和可靠,簡單時尚重裝富。 – cbp 2009-09-21 11:55:00