1.如果是MySql你要确定你的的表格式设置是否支持事务
2.db对象不是同一个 ,正确用法如下:
var mydb=方法外部的DB对象; mydb.Insetable(list).ExecuteCommand(); //使用方法内变量mydb mydb.Queryable<T>().ToList();//使用方法内变量mydb
事务有3种实现方式,你可以根据你的喜爱实现事务
需要注意db必须是同一个对象,如果db不是同一个对象事务将失效, mysql需要注意表的格式是否支持事务
var result = db.Ado.UseTran(() => { var beginCount = db.Queryable<Student>().ToList(); db.Ado.ExecuteCommand("delete student"); var endCount = db.Queryable<Student>().Count(); throw new Exception("error haha"); }); if(result.IsSuccess) { //result.ErrorMessage }
var result2 = db.Ado.UseTran<List<Student>>(() => { return db.Queryable<Student>().ToList(); }); if (result2.IsSuccess) { var list= result2.Data; }
try { db.Ado.BeginTran(); db.Ado.CommitTran(); } catch (Exception) { db.Ado.RollbackTran(); throw; }
SqlSugarClient db = new SqlSugarClient(new List<ConnectionConfig>() { 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} }); //库1 try { db.BeginTran();//用db.不能用db.ado. db.Deleteable<Order>().ExecuteCommand(); db.ChangeDatabase("2");//使用库2 db.Deleteable<Order>().ExecuteCommand(); db.CommitTran(); } catch { db.RollbackTran(); }
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对象
//用户使用案例 var db=GetSqlsugarclient();//关闭自动释放 using (var connection = (MySqlConnection)db.Ado.Connection) { using (var transaction = connection.BeginTransaction(_capBus, autoCommit: false)) { if (connection.State != ConnectionState.Open) { connection.Open(); } db.Ado.Transaction = (IDbTransaction)transaction.DbTransaction;//这行很重要 db.Insertable<Test>(new Test() { name = DateTime.Now.ToString() }).ExecuteCommand(); _capBus.Publish("Sample.RabbitMQ.MySql", DateTime.Now); transaction.Commit(); } }
2016 © donet5.comApache Licence 2.0