2010-01-23 54 views
0

我想做到以下幾點,在一個單一的原子事務:交易在城堡的ActiveRecord + NHibernate的傻瓜

  1. 通過ActiveRecord的通過ActiveRecord的閱讀對象
  2. 保存一個新的對象
  3. 更新另一個表通過NHibernate

另外,如果在我完成交易時,我在步驟1中讀取的對象的值已更改,我希望事務失敗。

我以前從未在AR或NH中使用過交易,因此請儘可能提供詳細信息。交易機制如何一起發揮作用?

回答

3

那麼,Castle ActiveRecord依賴於NHibernate。確實,Castle ActiveRecord Transaction類與NHibernate上的不一樣;但你應該把ActiveRecord看作是NHibernate中的一個包裝器。

所以不需要「一起玩」。因爲,內心深處,他們是一樣的。

另一個重要的概念是「會話」。 「會話」是一個工作單元,用於告訴NHibernate你想做什麼的「窗口」:查詢,更新,插入等。同樣,還有一個NHibernate會話和一個Castle ActiveRecord會話。再次,後者是第一個包裝。

這很重要,因爲當你在ActiveRecord中使用一個會話時(事實上你總是這麼做,即使是隱含的),也可以訪問它裏面的「隱藏的」NHibernate會話;通常使用傳遞給Execute方法的委託。這就是您可以在應用程序中使用兩種代碼的方式(請參閱Execute Callback example here)。

爲了更好地掌握會話含義,see here

最後,我建議你總是使用ActiveRecord的風格來聲明會話和事務,即使混合了兩種編碼風格。由於它們也代表NHibernate會話和事務,所以你是安全的。爲了更好地理解,請read here

PS:是的,我沒有寫你要求的例子(懶得這麼做),但我認爲如果你寫的話會對你的學習過程更好。相信我,這比你想象的要容易。