SqlSugar支持单库事务、多租户事务、多库事务,本文学习并测试单库事务的基本用法。
   使用SqlSugarClient类、ISqlSugarClient接口都可以创建SqlSugarClient数据库操作实例,其区别在于,针对单库而言,SqlSugarClient类支持调用BeginTran\CommitTran\RollbackTran、Ado. BeginTran\Ado.CommitTran\Ado.RollbackTran等两种方式处理事务,而ISqlSugarClient接口仅支持Ado.BeginTran\Ado.CommitTran\Ado.RollbackTran方式实现事务。
   针对低版本的SqlSugar,也可以调用ISqlSugarClient或SqlSugarClient的AsTenant().BeginTran\ AsTenant().CommitTran\AsTenant().RollbackTran处理事务。
   下面的测试代码,数据表中有四条数据,需要在一个事务中清空表格内容后再插入新数据。
 
   下面是正常执行的代码及数据库操作结果:
List<AppUsers> lstUsers=new List<AppUsers>();
AppUsers appUsers = new AppUsers();
appUsers.UserName = "tom";
appUsers.Password = "321";
lstUsers.Add(appUsers);
appUsers = new AppUsers();
appUsers.UserName = "jack";
appUsers.Password = "123";
lstUsers.Add(appUsers);
appUsers = new AppUsers();
appUsers.UserName = "lucy";
appUsers.Password = "123";
lstUsers.Add(appUsers);
try
{
    db.BeginTran();
    db.Deleteable<AppUsers>().ExecuteCommand();
    db.Insertable<AppUsers>(lstUsers).ExecuteCommand();
    db.CommitTran();
}
catch (Exception ex)
{
    db.RollbackTran();
    Console.WriteLine(ex.Message );
}
 

如果将插入的数据的名称相同(UserName是主键),则插入数据会报错,同时也触发了回滚操作,之前的数据未被清空。代码及数据库结果如下所示:
List<AppUsers> lstUsers=new List<AppUsers>();
AppUsers appUsers = new AppUsers();
appUsers.UserName = "大娃";
appUsers.Password = "321";
lstUsers.Add(appUsers);
appUsers = new AppUsers();
appUsers.UserName = "大娃";
appUsers.Password = "123";
lstUsers.Add(appUsers);
try
{
    db.BeginTran();
    db.Deleteable<AppUsers>().ExecuteCommand();
    db.Insertable<AppUsers>(lstUsers).ExecuteCommand();
    db.CommitTran();
}
catch (Exception ex)
{
    db.RollbackTran();
    Console.WriteLine(ex.Message );
}
 

 
  将插入的数据改正确,再运行程序即可正常清空并插入数据。
 
上述代码使用BeginTran\CommitTran\RollbackTran操作事务,测试过程中也使用了其它两种方式,效果相同。
参考文献:
 [1]https://www.donet5.com/home/Doc?typeId=1183









![[240720] X-CMD 发布 v0.4.1:新增 OpenAI GPT-4o mini 模型|优化 df ip dns ...](https://i-blog.csdnimg.cn/direct/27d600b657b94b8da4fcfcd9876d7495.png#pic_center)








