好的,我找到了一个解决方案。
场景: 我有两个基本类用于我的业务层,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