MySql注意事项:
static void Main(string[] args)
{
var db = Sugar.GetInstance();
try
{
db.Ado.BeginTran();
db.Insertable(new Student() { Id = "1", Name ="hpf", SchoolId = 1 }).ExecuteCommand();
throw new Exception(); //手动抛出异常,回滚Sql
db.Ado.CommitTran();
}
catch (Exception ex)
{
db.Ado.RollbackTran();
}
Console.ReadLine();
}
db.BeginTran(); //去掉了.ado
db.CommitTran(); //去掉了.ado
db.RollbackTran(); //去掉了.ado
目前还没有学习多租户有关知识
事务开始、CURD、事务结束
必须一致 这个事务才会生效,如果是MYSQL也检查一下表引擎是否支持事务项目运行起来的时候,在监视中手动输入 db.ContextId ,以便监控值是否保持不变
特定语法,方便实用
这种适合全局异常,直接出错扔出并且回滚
这种方式我没测试过
using (var tran = db.UseTran())
{
//业务代码
//里面禁止写 try处理事务逻辑,格式一定按现在的风格来
tran.CommitTran();
}
//要写 try处理异常可以写在外面
这种适合没有异常处理的,减少了try 处理
static void Main(string[] args)
{
var db = Sugar.GetInstance();
var result = db.UseTran(() =>
{
db.Insertable(new Student() { Id = "2", Name = "hpf", SchoolId= 2 }).ExecuteCommand();
//throw new Exception(); //手动抛出异常,测试事务回滚功能
return true;
});
if (result.Data == false)
{
if (result.IsSuccess == false)
Console.WriteLine("事务提交失败");
}
else
Console.WriteLine("事务提交完成");
Console.ReadLine();
}
目前还没有用到有关知识
目前还没有用到有关知识
请不要在同步方法里面写下面方代码,必须是异步方法才行 返回是要带有Task async
static async Task Main(string[] args)
{
var db = Sugar.GetInstance();
try
{
db.BeginTran();
await db.Insertable(new Student() { StudentId=13, Name="qwe"}).ExecuteCommandAsync();
//throw new Exception(); //手动抛出异常,测试事务回滚功能
db.CommitTran();
}
catch (Exception)
{
db.RollbackTran();
}
Console.ReadLine();
}
注意:
await db.UseTranAsync 前面的await不要漏掉了
public class Program
{
static async Task Main(string[] args)
{
var db = Sugar.GetInstance();
await Test(db);
Console.ReadLine();
}
public static async Task Test(SqlSugarClient db)
{
//异步事务
var result = await db.UseTranAsync(async () =>
{
await db.Insertable(new Student() { Id = "6", Name = "hpf",SchoolId = 2 }).ExecuteCommandAsync();
//throw new Exception(); //手动模拟抛异常
});
if (result.Data==false) //返回值为false
{
if (result.IsSuccess == true)
Console.WriteLine("添加成功");
else
Console.WriteLine("添加失败");
throw result.ErrorException;
}
}
}
目前还没有用到有关知识
文档参考:数据库的事务隔离级别
try
{
db.Ado.BeginTran(IsolationLevel.ReadCommitted);
//业务代码
db.Ado.CommitTran();
}
catch (Exception ex)
{
db.RollbackTran();
throw ex;
}
var mysqlDb = db.GetConnection("mysql");
var mssqlDb = db.GetConnection("mssql");
try
{
mysqlDb.Ado.BeginTran(IsolationLevel.ReadCommitted);//开启库1的事务
mssqlDb.Ado.BeginTran(IsolationLevel.ReadCommitted);//开启库2的事务
//业务代码 只能用 mysqlDb和 mssqlDb
db.CommitTran();//注意不能用db.ado.CommitTran
}
catch (Exception ex)
{
db.RollbackTran();
throw ex;
}
文档参考:数据事务