我目前正在研究VB.NET 2.0中的遗留项目。 该项目有一个非常有趣的DAL层,它不包含交易: - | 无论如何,我的工作是让程序的某些部分成为事务性的,而事实并非如此 可以访问DAL层代码。 所以我试图将整个代码部分放在单个TransactionScope中。
现在问题在于: 当从DAL层内部的某个地方抛出SqlException时,我的事务总是被回滚!即使我在同一个TransactionScope中捕获并处理异常。
我的问题:这是正常行为吗? 我有什么可以做的吗?
我认为当异常被抛出超出TransactionScope的范围时,事务被回滚是正常的,但是如果在这些范围内处理异常则不会!
非常感谢任何帮助!
编辑:SqlException实际上是从System.Data.Common.SqlCommand中抛出的,所以我无法阻止它发生。
此致 LDX
答案 0 :(得分:0)
好吧,我将收回我在下面的答案,我已经编辑出来以避免混淆任何人而不是必要...... :)
经过更多测试后,我确定如果捕获并处理(不重新抛出)正常异常,则事务将按预期完成。可能某些类别的异常(例如参与该事务的sql异常)可能总是使根范围中的事务无效,即使已处理,但我没有测试过,因此无法确认该理论。
抱歉!
是的,这似乎是设计上的。来自transactionScope文档:
[剪错信息]