好的,我找到了一個解決方案。
場景: 我有兩個基本類用於我的業務層,BaseBLL
和BaseListBLL
。這些類中的每一個都提供了一種方法,它調用必須在具體類中實現的astract方法。在交給抽象類執行更新或插入等任務之前,這些類開始TransactionScope
。
注意:在BaseListBLL啓動TransactionScope
之後,它調用BaseBLL
中的方法,該方法也啓動它自己的事務。這是因爲,我們將插入或更新從BaseBLL
派生的類的列表,它們全都包含在派生自BaseListBLL
的類中。
現在,例如,如果我們要更新角色表中的角色,則只會啓動一個事務。但是現在,當我們有一個角色對象具有另一個直接來自BaseListBLL
的類時,複雜性就出現了。
一個事務將開始列表中的第一個和另一個列表中的每個BaseBLL
對象執行所有插入或更新。
所以,現在,第一次插入,在錯誤發生後:
Error: Time-out interval must be less than 2^32-2. Parameter name: dueTm
被拋出。
我所做的就是
List類的,我設置了TranscationScope
對象是這樣的:
TransactionScope ts = new TransactionScope(TransactionScopeOption.Suppress)
和其他類
TransactionScope ts = new TransactionScope(TransactionScopeOption.Required, TimeSpan.MaxValue)
我已經得出的結論是:錯誤是由於我使用由列表中的BaseBLL
派生類創建的相同事務而引發的。當需要更新項目列表時,我必須抑制環境事務。
我希望這可以幫助別人。
我相信問題是關於.NET Framework事務:http://msdn.microsoft.com/en-us/library/system.transactions.transactionscope.aspx可能與ADO.NET和/或SQL Server 2008有關 – brianpeiris 2009-12-26 18:09:58
是的。你是對的。 – Tebo 2009-12-26 18:11:21