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()处,如果过程没有出错,这通知事务管理器去提交,如果错误这不提交,保证了整个执行过程的一致性。

转载于:https://www.cnblogs.com/zcm123/archive/2013/06/05/3118938.html

TransactionScope支持嵌套事务,这意味着可以在一个事务范围内嵌套另一个事务范围。嵌套事务的使用场景是某些操作需要在子事务中独立执行,而不受父事务的影响。下面是一个TransactionScope嵌套事务的代码示例: ``` using (TransactionScope outerScope = new TransactionScope()) { try { // 在外部事务中执行一些操作 using (SqlConnection connection1 = new SqlConnection(connectionString)) { connection1.Open(); SqlCommand command1 = new SqlCommand("INSERT INTO Customers (Name) VALUES ('Customer 1')", connection1); command1.ExecuteNonQuery(); } // 在内部事务中执行一些操作 using (TransactionScope innerScope = new TransactionScope()) { using (SqlConnection connection2 = new SqlConnection(connectionString)) { connection2.Open(); SqlCommand command2 = new SqlCommand("INSERT INTO Orders (CustomerId, OrderDate) VALUES ((SELECT TOP 1 Id FROM Customers ORDER BY Id DESC), GETDATE())", connection2); command2.ExecuteNonQuery(); } // 提交内部事务 innerScope.Complete(); } // 提交外部事务 outerScope.Complete(); } catch (Exception ex) { // 回滚事务 Console.WriteLine("Transaction rolled back: " + ex.Message); } } ``` 在这个示例中,我们在外部事务范围内创建了一个内部事务范围。在内部事务范围中,我们执行了另一个数据库操作,并调用了内部事务的Complete方法来提交内部事务。在外部事务范围中,我们执行了另一个数据库操作,并调用了外部事务的Complete方法来提交外部事务。如果任何一个操作失败,我们就会回滚整个事务。需要注意的是,当嵌套事务提交时,只有最外层的事务提交才会真正提交所有操作,如果内部事务没有被提交,则会将整个事务回滚。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值