事务用法

单库

注意事务一定要是同一个db对象才会有效果

using (SqlSugarClient db = SugarDao.GetInstance())//开启数据库连接
{
    db.CommandTimeOut = 30000;//设置超时时间
    try
    {
     db.BeginTran();//开启事务
     //db.BeginTran(IsolationLevel.ReadCommitted);+3重载可以设置事世隔离级别
     db.CommitTran();//提交事务
    }
    catch (Exception ex)
    {
      db.RollbackTran();//回滚事务
      throw ex;
    }
}


多库简单模式事务

using (ISqlSugarClient idb = DbRepository.GetInstance(DbType.MySql, SugarDao.MySqlConnString))
{
    try
    {
        idb.BeginTran();
        var list = idb.Queryable<Student>().First();
        idb.CommitTran();
    }
    catch (Exception)
    {
        idb.RollbackTran();
        throw;
    }
}





多库灵活模式事务

如果不跨库事务可以用下面方法

using (MyRepository db = new MyRepository())
{
    try
    {
        db.Database.BeginTran();
        //当前连接的sqlconn1
        var list = db.Database.Queryable<Student>().First();
        db.Database.CommitTran();
    }
    catch (Exception)
    {
        db.Database.RollbackTran();
        throw;
    }
    //切换mysql
    db.SetCurrent(db.MySqlConn1);
    try
    {
        db.Database.BeginTran();
        var list2 = db.Database.Queryable<Student>().First();
        db.Database.CommitTran();
    }
    catch (Exception)
    {
        db.Database.RollbackTran();
        throw;
    }
}


跨库事务用法

using (TransactionScope scope = new TransactionScope())
{
    var list = db.Database.Queryable<Student>().First();
    //切换mysql
    db.SetCurrent(db.MySqlConn1);
    var list2 = db.Database.Queryable<Student>().First();
}


收藏到朋友圈: