在实际开发工作中,很多情况下会出现这样的事情,执行一个事件,这个事件执行插入操作后获取执行后的结果,然后调用另一接口插入数据,插入完之后,可能还要再执行其他一些操作,这些操作,是离散的,如果上面所说两步都执行了,但在之后处理逻辑出现异常,那么之前插入的数据将成为垃圾数据,我们所希望的是能够在整个这个方法定义为一个事务,要成功大家一起成功,要失败大家都失败,像这样的场景,就可以使用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(); returntrue; } catch (Exception ex) { throw ex; } }
IBaseMgr 是我定义的一个接口,接口中有两个方法,一个是添加企业,一个是添加账户,需求是企业添加后要为该企业添加一个管理员, 所以可以看到这是两个离散的方法,如果添加用户失败,那么之前添加的企业信息将成为垃圾数据,但是用了TransactionScope 之后,事务管理器会 预执行代码,直至Complete()处,如果过程没有出错,这通知事务管理器去提交,如果错误这不提交,保证了整个执行过程的一致性。