1、事务失效原因

    1.如果是MySql你要确定你的的表格式设置是否支持事务

    2.db对象不是同一个 ,正确用法如下:

    1. var mydb=方法外部的DB对象;
    2. mydb.Insetable(list).ExecuteCommand(); //使用方法内变量mydb
    3. mydb.Queryable().ToList();//使用方法内变量mydb

    2、单库事务

    事务有3种实现方式,你可以根据你的喜爱实现事务

    需要注意db必须是同一个对象,如果db不是同一个对象事务将失效, mysql需要注意表的格式是否支持事务

    2.1没有返回值的事务

    1. var result = db.Ado.UseTran(() =>
    2. {
    3. var beginCount = db.Queryable().ToList();
    4. db.Ado.ExecuteCommand("delete student");
    5. var endCount = db.Queryable().Count();
    6. throw new Exception("error haha");
    7. });
    8. if(result.IsSuccess)
    9. {
    10. //result.ErrorMessage
    11. }

    2.2有返回值的事务

    1. var result2 = db.Ado.UseTran<List>(() =>
    2. {
    3. return db.Queryable<Student>().ToList();
    4. });
    5. if (result2.IsSuccess)
    6. {
    7. var list= result2.Data;
    8. }

    2.3使用try的方式实现事务

    1. try
    2. {
    3. db.Ado.BeginTran();
    4. db.Ado.CommitTran();
    5. }
    6. catch (Exception)
    7. {
    8. db.Ado.RollbackTran();
    9. throw;
    10. }

    3、多库事务

    1. SqlSugarClient db = new SqlSugarClient(new List()
    2. {
    3. new ConnectionConfig(){ ConfigId="1", DbType=DbType.SqlServer,
    4. ConnectionString=Config.ConnectionString,InitKeyType=InitKeyType.Attribute,IsAutoCloseConnection=true },
    5. new ConnectionConfig(){ ConfigId="2", DbType=DbType.MySql,
    6. ConnectionString=Config.ConnectionString4 ,InitKeyType=InitKeyType.Attribute ,IsAutoCloseConnection=true}
    7. });
    8. //库1
    9. try
    10. {
    11. db.BeginTran();
    12. db.Deleteable().ExecuteCommand();
    13. db.ChangeDatabase("2");//使用库2
    14. db.Deleteable<Order>().ExecuteCommand();
    15. db.CommitTran();
    16. }
    17. catch
    18. {
    19. db.RollbackTran();
    20. }

    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对象