事务用法SqlSugar5x

单库事务是针一个db操作执行的事务,无论是ISqlSugarClient和SqlSugarClient用法都一样

try{db.Ado.BeginTran();db.Insertable(newOrder(){.....}).ExecuteCommand();db.Insertable(newOrder(){.....}).ExecuteCommand();db.Ado.CommitTran();}catch(Exceptionex){db.Ado.RollbackTran();throwex;}如果一个db就一个库,那么你也可以用多租户事务节约代码,因为2者在一个库的情况下作用一样

db.BeginTran();//去掉了.adodb.CommitTran();//去掉了.adodb.RollbackTran();//去掉了.ado//ISqlSugarClient接口使用多租户事务看文档2.22、多库事务(可跨库)多数据库事务是SqlSugar独有的功能,稳定比CAP更强(CAP还有一层队列),在单个程序中可以很愉快的使用多库事务

SqlSugarClient或者SqlSugarSope继承于2个接口,代码如下事物

SqlSugarClientdb=newSqlSugarClient(newList(){newConnectionConfig(){ConfigId="0",DbType=DbType.SqlServer,ConnectionString=..,IsAutoCloseConnection=true},newConnectionConfig(){ConfigId="1",DbType=DbType.MySql,ConnectionString=..,IsAutoCloseConnection=true}});简单的说多租户事务和单库事务用法基本100%一致,唯一区别就是少了.Ado

db.Ado.BeginTran//单库db.BeginTran//多库事务db.AsTenant().BeginTran()//多库事务一般是接口ISqlSugarClient使用2.1SqlSugarClient事务因为继承ITenant了可以直接使用(老版本varmysql=db.GetConnection要写在事务外面)

db.AsTenant().BeginTran();//低版本(dbasITenant).BeginTran()db.AsTenant().CommitTran();db.AsTenant().RollbackTran();

db.ContextId要从事务开始,CURD和事务结束必须一致这个事务才会生效,如果是MYSQL也检查一下表引擎是否支持事务

不一致怎么办?

测试代码最好用Insert,因为Update有条件过滤等因素添会添加测试难度,我们用插入来进行测试会比较简单些

try{db.BeginTran();Console.WriteLine(db.Queryable().Count());//插入前数量db.Insertable(newOrder(){CreateTime=DateTime.Now,Name="aa",Price=1}).ExecuteCommand();Console.WriteLine(db.Queryable().Count());//插入后数量thrownewException("出错");db.CommitTran();}catch{db.RollbackTran();Console.WriteLine(db.Queryable().Count());//回滚后数量}输出结果插入前和回滚后一样就说明成功的

这种适合有全局异常的,直接出错扔出错并且回滚

using(vartran=db.UseTran()){//业务代码//里面禁止写try处理事务逻辑,格式一定按现在的风格来tran.CommitTran();}//要写try处理异常可以写在外面语法糖2:自动异常这种适合没有异常处理的,减少了try处理

SqlSugarScope单例模式支持跨事务方法

SqlSugarClient需要IOC设置Scoped周期实现

CAP可以支持跨程序间的事务处理(非跨程序事务不建议用,涉及到队列等,在单程序中稳定性肯定不如自带的多租户事务)

注意:MySql用户使用升级到最新

1、数据库的自动释放要关闭

2、手动打开数据库连接db.Ado.Connection.Open();

3、用db.Ado.Connection创建事务

4、把你的事务赋值到ORM对象db.Ado.Transaction=你的事务;

5、执行你的代码

6、关闭Connection对象

备份地址

请不要在同步方法里面写下面方代码,必须是异步方法才行返回是要带有Taskasync

用法1:

try{awaitdb.BeginTranAsync();awaitdb.Insertable(newOrder(){CreateTime=DateTime.Now,CustomId=1,Name="aaa",Price=0}).ExecuteCommandAsync();awaitdb.CommitTranAsync();}catch(Exception){awaitdb.RollbackTranAsync();}用法2:

//只有5.0.3.8支持,老版本请升级使用varres=awaitdb.UseTranAsync(async()=>{awaitdb.Insertable(newOrder(){CreateTime=DateTime.Now,CustomId=1,Name="aaa",Price=0}).ExecuteCommandAsync();returntrue;//返回值会变成res.Data});if(result.Data==false)//返回值为false{//result.Data业务的返回值//如果是上面的逻辑result.Data==true肯定业务成功并且事务成功//if(result.IsSuccess==false)//事务执行了回滚//if(result.IsSuccess==true)//事务提交完成}//注意://awaitdb.UseTranAsync前面的await不要漏掉了

单库模式用法

try{db.Ado.BeginTran(IsolationLevel.ReadCommitted);//业务代码db.Ado.CommitTran();}catch(Exceptionex){db.RollbackTran();throwex;}多租户模式

varmysqlDb=db.GetConnection("mysql");varmssqlDb=db.GetConnection("mssql");try{mysqlDb.Ado.BeginTran(IsolationLevel.ReadCommitted);//开启库1的事务mssqlDb.Ado.BeginTran(IsolationLevel.ReadCommitted);//开启库2的事务//业务代码只能用mysqlDb和mssqlDbdb.CommitTran();//注意不能用db.ado.CommitTran}catch(Exceptionex){db.RollbackTran();throwex;}9、嵌套事务(支持异步)9.1.共享模式有外部事务,内部事务用外部事务(推荐)

通过工作单元实现嵌套事务5.1.2.5-preview03

//db.Ado.IsNoTran()表示事务为null才开启事务using(varuow=db.CreateContext(db.Ado.IsNoTran())){using(varuow2=db.CreateContext(db.Ado.IsNoTran())){uow2.Commit();}uow.Commit();//禁止用db.RollBack工作单元内只要throw会自动回滚}9.2.子事务独立(不推荐)不推荐原因:这种很容易出现坑,比如业务A和业务B都用到了一样的表就会死锁

try{db.BeginTran();//业务..AvarchildDb=db.CopyNew();try{childDb.BeginTran();//...业务BchildDb.Commit();}catch(Exception){childDb.RollbackTran();//数据回滚throw;}db.CommitTran();}catch(Exception){db.RollbackTran();//数据回滚throw;}

THE END
1.082讲解静姐考研英语每日一句I2015英二T1021原句 With the blurring of roles, and the fact that the home front lags well behind the workplace in making adjustments for working women, it's not surprising that women are more stressed at home. 2生词 1)blur v. (使)变得模糊不清;(使)视线模糊;(使)看不清;(使)难以区分 https://www.bilibili.com/read/mobile/17196745/
2.MySQL事务ROLLBACK,COMMIT用法详解MySQL事务-ROLLBACK,COMMIT用法详解 使用ROLLBACK 既然我们已经知道了什么是事务处理,下面讨论事务处理的管理中所涉及的问题。 管理事务处理的关键在于将SQL语句组分解为逻辑块,并明确规定数据何时应该回退,何时不应该回退。 MySQL使用下面的语句来标识事务的开始:https://blog.csdn.net/jiangeeq/article/details/80534273
3."Rollback"的意思和用法HiNativeQ:rollback. (in a store )是什麼意思 A:I don't get it I thought thatrollbackwas that the price decrease 查看更多回答 Q:rollback是什麼意思 A:Discount 查看更多回答 有關單詞和短語的意思和用法 people Presiding right store target transgender https://tw.hinative.com/dictionaries/rollback
4.autocommit自动提交事务及commitrollback用法autocommit自动提交事务及commit、rollback用法 微信交流群:https://732903.hlcode.cn/?id=NK1fWUR MySQL默认开启事务自动提交,每条SQL语句都会被当做一个单独的事务自动执行。 一、查看autocommit自动提交事物状态 SHOW VARIABLES LIKE'autocommit'; 1、开启状态:ONhttps://www.ewbang.com/community/article/details/1000057222.html
5.rollback是什么意思rollback在线翻译英语读音用法例句reducing prices back to some earlier level rollback的用法和样例: 例句 用作名词 (n.) This operation is a statement-level rollback . 这个操作是一个语句级别的回滚。 Rollback is performed in the reverse order of install. 回滚执行的顺序与安装的顺序相反。 https://dict.cn/rollback
6.sql中rollback语句的用法是什么问答在SQL中,ROLLBACK语句用于撤销之前执行的事务,将数据库恢复到事务开始之前的状态。当执行ROLLBACK语句时,所有已提交的更改将被撤销,并且事务将被终止。这可以帮助避免不正确或意外的更改对数https://www.yisu.com/ask/27873971.html
7.Callback与Promise间的桥梁——promisifyPromise 自问世以来,得到了大量的应用,简直是 javascript 中的神器。它很好地解决了异步方法的回调地狱、提供了我们在异步方法中使用 return 的能力,并将 callback 的调用纳入了自己的管理,而不是交给异步函数后我们就无能为力了(经常有 callback 被莫名调用两次而导致程序出错)。 https://zhuanlan.zhihu.com/p/30650091
8.英语技巧动词短语用法vol.1:backup的5种用法shy away,step back 2 表示“支持” to back someone/something up back up很常用的意思是“帮助、支持” to support or help someone - 示例 - My family backed me up throughout the court case. 我的家人帮助我撑过了这起诉讼案件。 这https://mp.weixin.qq.com/s?__biz=MzAwNDA5NDIzMw==&mid=2652610824&idx=6&sn=e6abcdbfff5cd7fe20420e4cb0f1c7f2&chksm=80de217eb7a9a868c07db4374059566579436e3f8a2461351e93aedf5889b5c4fb079bed59e6&scene=27
9.从SQL语言的分类谈COMMIT和ROLLBACK的用法从SQL语言的分类谈COMMIT和ROLLBACK的用法 从功能上划分,SQL语言可以分为DDL,DML和DCL三大类。 1. DDL(Data Definition Language) 数据定义语言,用于定义和管理 SQL 数据库中的所有对象的语言 ; CREATE---创建表 ALTER---修改表 DROP---删除表 2. DML(Data Manipulation Language)https://blog.51cto.com/kusorz/1785810
10.rollback是什么意思及反义词翻译rollback的意思用法rollback是什么意思及反义词 沪江词库精选rollback是什么意思、英语单词推荐、用法及解释、中英文句子翻译、英语短语 英音['r?ulb?k] ; 美音['r?ulb?k] ; 名词 反转,卷回,推回去 英语解释 reducing prices back to some earlier level the act of forcing the enemy to withdrawhttps://www.hujiang.com/ciku/rollback/
11.词汇“rollback”的中英文读音翻译用法及例句释义 rollbackUK:*/?rlb?k/US:/?ro?l?b?k/ ,(rōl′bak′)UK-RP:UK-Yorkshire:Irish:Scottish:US Southern:Australian:Jamaican: See also: roll back主要翻译 rollback n (return to lower prices) (价格)回降,回落The store was having a rollback to their original prices.http://www.frnht.com/378603.html
12.Spring中@Transactional(rollbackFor=Exception.class)属性用法介绍在@Transactional注解中如果不配置rollbackFor属性,那么事物只会在遇到RuntimeException的时候才会回滚,加上rollbackFor=Exception.class,可以让事物在遇到非运行时异常时也回滚 @Transactional注解的全部属性详解 @Transactional属性 到此这篇关于Spring中@Transactional(rollbackFor=Exception.class)属性用法介绍的文章就介绍到https://www.jb51.net/article/233336.htm
13.tran提交事务rollbacktran回滚(撤消)事务的用法及理解实验五:事务案例:完成转账的过程,如果转账1000会回滚,提示失败,如果转账800,提示成功。 要求: (1)创建表名为bank,如图所示: (2)Currentmoney列的Check约束: (3是提交还是撤销--*/ IF @errorSum<>0 --如果有错误BEGINPRINT '交易失败,回滚事务'ROLLBACKTRANSACTION END ELSE https://www.pianshen.com/article/84482576296/
14.Spring事务失效的六种情况rollback() 方法用来回滚事务。 2.2.2 TransactionDefinition TransactionDefinition用来描述事务的具体规则,也称作事务的属性。事务有哪些属性呢?看下图: 可以看到,主要是五种属性: 隔离性 传播性 回滚规则 超时时间 是否只读 这五种属性接下来松哥会和大家详细介绍。 https://developer.aliyun.com/article/1233236
15.PHPmysqliPHP mysqli_rollback() 函数 PHP mysqli 参考手册 关闭自动提交,做一些查询,提交查询,然后回滚当前事务:..https://www.runoob.com/php/func-mysqli-rollback.html
16.mysqltop用法腾讯云开发者社区linux中top的用法 in用法 mysql mysql and用法 mysql 分组top mysql top语句 mysql语句top mysql 支持top mysql支持top mysql if exists用法 mysql except用法 mysql substr用法 mysql declare用法 mysql default用法 mysql set用法 mysql in的用法 mysql rollback用法 https://cloud.tencent.com/developer/information/mysql%20top%E7%94%A8%E6%B3%95
17.JavaTransaction.rollback方法代码示例本文整理汇总了Java中org.hibernate.Transaction.rollback方法的典型用法代码示例。如果您正苦于以下问题:Java Transaction.rollback方法的具体用法?Java Transaction.rollback怎么用?Java Transaction.rollback使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类org.hibernatehttps://vimsky.com/examples/detail/java-method-org.hibernate.Transaction.rollback.html
18.liquibaseGroovy脚本用法示例databaseChangeLog(logicalFilePath:''){//定义参数clobType=0//rollback的用法changeSet(id:'',author:'',dbms:'',runAlways:true,runOnChange:false,context:'',runInTransaction:true,failOnError:false){// 添加描述comment"Liquibase can be aware of this comment"preConditions{// 与changeLog的preConditions一https://www.jianshu.com/p/dcab2df0a105
19.rollback是什么意思rollback怎么读中文意思用法rollback是什么意思、rollback怎么读读音:英['rlb?k] 美['rolb?k]rollback 基本解释n. 反转,压价rollback 网络释义n. 卷回;反转;(物价、利率等的)回降词组短语1、automatic rollback [计] 自动回退 2、system rollback [计] 系统重新运行 3、rollback recovery 卷回恢复 4、spring rollbackhttps://danci.gjcha.com/rollback.html
20.rollback是什么意思rollback在线翻译读音用法例句含义查字典英语词典频道免费为您提供在线翻译,包括rollback是什么意思,rollback的翻译,rollback的读音,rollback的用法,rollback的同/反义词,rollback的含义,rollback参考例句等内容,更多单词在查字典。https://www.chazidian.com/dict/w/rollback
21.Rollback是什麼意思Rollback的讀音解釋例句用法Rollback ['rlb?k] or ['rolb?k] 解釋/意思: (noun.) reducing prices back to some earlier level. (noun.) the act of forcing the enemy to withdraw. 編輯:苏珊娜--FromWordNethttp://enmama.net/_a_cnt/43005.php