天天看点

asp.net MVC 事务

使用事务的目的是什么?

保证事务范围内的代码,要么全部执行,要么全不执行,也就是出错回滚。

写在数据库脚本里很好理解,但是用在应用程序层面,没有看到catcha error rallback的代码,心里还是不踏实:

1、应用程序层面使用TransactionScope,在Scope范围内没有catch error并回滚的代码,所以想知道如果在Complete之前出错,会是什么情况?

 本人设置了应用程序层面的报错,报错前后都有数据库操作,执行结果: 事务自动回滚

 本人设置了数据库脚本层面报错,执行结果:自动回滚

2、在程序编码中我们仍然需要知道事物是否成功执行,实现方案是在scope外部try catch(TransactionAbortedException ex)

以下是标准语法

try
{
    using (TransactionScope scope = new TransactionScope())
    {
        // Do Operation 1
        // Do Operation 2
        //...
 
        // 如果所有的操作都执行成功,则Complete()会被调用来提交事务
        // 如果发生异常,则不会调用它并回滚事务
        scope.Complete();
    }
}
catch (TransactionAbortedException ex) { 
  //异常处理
  writer.WriteLine("TransactionAbortedException Message: {0}", ex.Message); 
}
      

  

总结:

在Complete()之前,无论是出现程序级别的错误,还是数据库级别的错误,事物都会回滚。不需要写rollback,而这些是通过框架处理的。

通过监测数据库正在执行的事务,可以观察事务在代码运行过程中的状态

查看active transaction 的sql

select * from sys.dm_tran_session_transactions

 官方文档:

 TransactionScope 类 (System.Transactions) | Microsoft Docs

更详细更深入的用法,点击链接:

https://www.cnblogs.com/yilezhu/p/10170712.html

本文来自博客园,作者:jiayouliucui,转载请注明原文链接:https://www.cnblogs.com/cheery-go/p/15608322.html