TransactionScope 类的使用以及使用场景简介

       在实际开发工作中,很多情况下会出现这样的事情,执行一个事件,这个事件执行插入操作后获取执行后的结果,然后调用另一接口插入数据,插入完之后,可能还要再执行其他一些操作,这些操作,是离散的,如果上面所说两步都执行了,但在之后处理逻辑出现异常,那么之前插入的数据将成为垃圾数据,我们所希望的是能够在整个这个方法定义为一个事务,要成功大家一起成功,要失败大家都失败,像这样的场景,就可以使用TransactionScope 类。

      下面请看代码:

using (TransactionScope transaction = new TransactionScope(TransactionScopeOption.Required))
            {
                try
                {
                    IBaseMgr ibaseMgr = FacadeContainer.Get<IBaseMgr>();
                    ibaseMgr.Add(enterprise);
                    ibaseMgr.Add(user, ibaseMgr.GetRoleByName("企业管理员").IID.ToString());
                    transaction.Complete();
                    return true;
                }
                catch (Exception ex)
                {
                    throw ex;
                }
            }
IBaseMgr 是我定义的一个接口,接口中有两个方法,一个是添加企业,一个是添加账户,需求是企业添加后要为该企业添加一个管理员, 所以可以看到这是两个离散的方法,如果添加用户失败,那么之前添加的企业信息将成为垃圾数据,但是用了TransactionScope 之后,事务管理器会 预执行代码,直至Complete()处,如果过程没有出错,这通知事务管理器去提交,如果错误这不提交,保证了整个执行过程的一致性。

posted on 2011-09-01 15:34  踏雪望月  阅读(393)  评论(0编辑  收藏  举报

导航