1、事务失效原因
1.如果是MySql你要确定你的的表格式设置是否支持事务
2.db对象不是同一个 ,正确用法如下:
var mydb=方法外部的DB对象;mydb.Insetable(list).ExecuteCommand(); //使用方法内变量mydbmydb.Queryable().ToList();//使用方法内变量mydb
2、单库事务
事务有3种实现方式,你可以根据你的喜爱实现事务
需要注意db必须是同一个对象,如果db不是同一个对象事务将失效, mysql需要注意表的格式是否支持事务
2.1没有返回值的事务
var result = db.Ado.UseTran(() =>{var beginCount = db.Queryable().ToList();db.Ado.ExecuteCommand("delete student");var endCount = db.Queryable().Count();throw new Exception("error haha");});if(result.IsSuccess){//result.ErrorMessage}
2.2有返回值的事务
var result2 = db.Ado.UseTran<List>(() =>{return db.Queryable<Student>().ToList();});if (result2.IsSuccess){var list= result2.Data;}
2.3使用try的方式实现事务
try{db.Ado.BeginTran();db.Ado.CommitTran();}catch (Exception){db.Ado.RollbackTran();throw;}
3、多库事务
SqlSugarClient db = new SqlSugarClient(new List(){new ConnectionConfig(){ ConfigId="1", DbType=DbType.SqlServer,ConnectionString=Config.ConnectionString,InitKeyType=InitKeyType.Attribute,IsAutoCloseConnection=true },new ConnectionConfig(){ ConfigId="2", DbType=DbType.MySql,ConnectionString=Config.ConnectionString4 ,InitKeyType=InitKeyType.Attribute ,IsAutoCloseConnection=true}});//库1try{db.BeginTran();db.Deleteable().ExecuteCommand();db.ChangeDatabase("2");//使用库2db.Deleteable<Order>().ExecuteCommand();db.CommitTran();}catch{db.RollbackTran();}
4、CAP事务
注意:MySql用户使用 sqlSugarCore.MySqlConnector 替换 sqlSugarCore , Cap2.6以上只能用MySqlConnector
1、数据库的自动释放要关闭
2、手动打开数据库连接 db.Ado.Connection.Open();
3、用db.Ado.Connection创建事务
4、把你的事务赋值到ORM对象 db.Ado.Transaction = 你的事务;
5、执行你的代码
6、关闭Connection对象
