博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
事务嵌套的问题
阅读量:6878 次
发布时间:2019-06-26

本文共 877 字,大约阅读时间需要 2 分钟。

使用 TransactionScope 的过程中,如果存在嵌套事务,比如, Bll 层使用了事务,而所调用的 Dal 内方法也使用了事务的话。假设我们吃掉了 Dal 的异常,那么,外部事务会不会成功?

测试代码如下:

using(var ts = new TransactionScope())

{
    foreach(var conn in conns)
    {
        conn.Dump();   
        ExecuteNonQuery(conn, CommandType.Text, "update [EL_Organization].[User] set Name='hhhhhh' where UserName='luminji'",null);
        try
        {
            using(TransactionScope tsInner = new TransactionScope())
            {
                ExecuteNonQuery(conn1, CommandType.Text, "update [EL_Organization].[User] set Name='lll' where UserName='luminji1'",null);
                throw new Exception();
                ExecuteNonQuery(conn2, CommandType.Text, "update [EL_Organization].[User] set Name='lll' where UserName='luminji1'",null);
                tsInner.Complete();
            }
        }
        catch
        {
        }
    }
   
    ts.Complete();
}

测试发现,TransactionScope 所代表的事务,是会往上抛的,即,内部事务失败,外部也同样失败。

所以,轻易不要吃掉 Dal 层的异常,否则,业务逻辑层的代码执行失败(sql 执行失败),上层没有得到异常,却又不知道为什么发生了异常了。

转载于:https://www.cnblogs.com/luminji/p/3564384.html

你可能感兴趣的文章
Cisco设备作为DHCP服务器的配置方法(下)
查看>>
戴尔Windows 8终端:办公、娱乐两不误
查看>>
一体化解决方案是一条正确的发展道路
查看>>
Java中final和static关键字总结
查看>>
Oracle11.2.0.4-Rac集群hang分析记录
查看>>
Objective-C中init函数实现的相关研究
查看>>
java中重载与重写的区别
查看>>
Powerdesigner数据库建模--概念模型--ER图
查看>>
Rss内容读取
查看>>
解决Xcode 代码颜色不显示
查看>>
java 的继承,深入理解
查看>>
一个强大的人民币大写转换的正则表达式
查看>>
MySQL索引背后的数据结构及算法原理zz
查看>>
用代码实现Sharepoint2010的个人信息的照片上传(原创)
查看>>
MF前传——探索者一号简介
查看>>
HDU 3681 Prison Break
查看>>
Spring-模板方法模式及Callback
查看>>
牛刀小试:使用Reactive Extensions(Rx),一行代码实现多线程任务执行规定时间后自动停止...
查看>>
addslashes与mysql_real_escape_string的区别
查看>>
[译]XPath和CSS选择器
查看>>