可以将一组操作作为事务的一部分来进行处理
标签:
什么是TransactionScope呢?TransactionScope作为System.Transactions的一部分被引入到.NET 2.0。同时SqlClient for .NET Core 从 2.1 及以上版本开始供给对System.Transactions的撑持 。 它是一个类,它供给了一种简单的要领,可以将一组操纵作为事务的一部分来进行措置惩罚惩罚,而不必担忧场景背后的庞大性。如果某个操纵在执行的过程中掉败的话,则整个事务将掉败并执行回滚操纵,从而裁撤已完成的所有操纵。所有这些都将由框架措置惩罚惩罚,从而确保数据的一致性。
如何使用TransactionScope呢?要使用它,您需要添加System.Transactions的引用,如果你使用的是.net core的话。这个引用被包罗在netcoreapp2.2\System.Transactions.Local.dll 中, 该引用是框架库的一部分(凡是默认情况下不会自动添加)。添加后,在我们想要使用它的处所添加名称空间 System.Transactions即可。代码如下所示:
try{using(TransactionScopescope=newTransactionScope()){// Do Operation 1// Do Operation 2//...// 如果所有的操纵都执行告成,则Complete()会被挪用来提交事务// 如果产生异常,则不会挪用它并回滚事务scope.Complete();}}catch(ThreadAbortExceptionex){// 措置惩罚惩罚异常}
在上面的代码中我们可以看到我们在创建TransactionScope实例时使用了using 语句块及Disposable块,它确保了当dispose分开块并结束事务范畴时挪用dispose来进行资源的释放。
在一个Transaction范畴中,我们可以做多个连接甚至链接到差别数据库的操纵的,如下所示:
using(TransactionScopescope=newTransactionScope()){using(con=newSqlConnection(conString1)){con.Open();// 执行操纵 1// 执行操纵 2//...}using(con=newSqlConnection(conString2)){con.Open();// 执行操纵 1// 执行操纵 2//...}scope.Complete();}
下面我们使用两个差此外数据库连接字符串来连接差此外数据库。固然我们也可以按照我们的业务要求使用尽可能大都据库。我们也可以再事务中嵌套事务。如下代码所示:
publicvoidDoMultipleTransaction(){try{using(TransactionScopescope=newTransactionScope()){using(con=newSqlConnection(conString1)){con.Open();// 执行操纵1}OtherTransaction();scope.Complete();}}catch(ThreadAbortExceptionex){// 措置惩罚惩罚异常}}privatevoidOtherTransaction(){using(TransactionScopescope=newTransactionScope()){using(con=newSqlConnection(conString2)){con.Open();// 执行操纵}scope.Complete();}}
这里最顶层的事务范畴称为根范畴。此外这里需要注意的是即使通过挪用scope.Complete()完成内部事务(上面的OtherTransaction ),如果由于各类原因无法挪用rootscope complete,那么整个事务也将被回滚包孕内部的事务。
*注意:执行漫衍式trsanctions时,您可能会收到以下异常之一*
处事器上的MSDTC不成用
已禁用漫衍式事务打点器(MSDTC)的网络访谒。
温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/file/web/32127.html
- 上一篇:webpack 配置(疏散)
- 下一篇:00:00:00");//2020-1-1