2010-07-27 39 views
0

這個問題純屬AR相關。Active Record/Nhibernate TransactionScopes問題

假設我的web/wcf應用程序中有2層--DataLayer和BusinessLayer。 DataLayer包含幾乎在映射上工作的原子操作(查找,獲取,保存,特殊查找,交叉查找等:))。有很多HQL或Criterias。這一層沒有使用SessionScopes。我的一些映射包含懶惰集合。

現在,BL層具有包含與DL調用混合在一起的業務邏輯的方法 - 這很正常。對於每個只有只讀操作的公共方法,我都指定了SessionScope(FlushAction.Never)。對於所有那些有一些保存或更新操作的方法,我使用TransactionScope(),裏面帶有try catch,方法結束時有直接的VoteCommit,catch子句中有VoteRollback。我將ReadCommitted設置爲isolationLevel。

對於基本情況這個工作。當我編寫使用其他方法和自己的事務的方法時,我開始遇到真正的問題 - 我正在談論鎖。例如,我有事務遞歸的方法。 似乎某些'讀取'方法(擁有自己的SessionScope(FlushAction.Never))由於其他事務而被阻塞。

我不能確切地追查究竟是什麼錯誤,但我開始認爲我有一些主要的設計問題。

城堡網站上的幫助對我來說並沒有多大的幫助,同時在AR源中也有測試 - 它們對我來說太簡單了。

任何人都可以真正解釋我應該如何使用TransactionScopes或什麼是我的錯誤?

+0

你在用溫莎嗎? – 2010-07-27 12:47:15

+0

不是。你有什麼建議? – IamDeveloper 2010-07-27 15:04:59

回答

1

我推薦使用Castle.Service.Transaction,它允許您以聲明方式而不是顯式方式執行事務。這通常通過Automatic Transaction Management facility使用,但它需要Windsor

+0

那麼,我已經實現了按會話請求的方法。 您是否認爲使用Windsor軟件包更有意義? – IamDeveloper 2010-07-28 07:53:59

+0

@StupidDeveloper:如果你想使用交易,是的。如果你不需要交易,那麼不需要。 – 2010-07-28 12:35:43

相關問題