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