当前位置:网站首页 > 技术博客 > 正文

事务 sql



单库事务是针一个db操作执行的事务,无论是 ISqlSugarClient和  SqlSugarClient 用法都一样

如果一个db就一个库,那么你也可以用多租户事务节约代码,因为2者在一个库的情况下作用一样

多数据库事务是SqlSugar独有的功能,稳定比CAP更强(CAP还有一层队列),在单个程序中可以很愉快的使用多库事务

SqlSugarClient或者SqlSugarSope 继承于2个接口 ,代码如下事物

多租户声明

简单的说多租户事务和单库事务用法基本100%一致,唯一区别就是少了.Ado

因为继承  ITenant 了可以直接使用   (老版本var mysql=db.GetConnection要写在事务外面)

因为和ITenant没有继承关需要转换一下

db.ContextId要从事务开始,CURD 和事务结束 必须一致 这个事务才会生效,如果是MYSQL也检查一下表引擎是否支持事务

不一致怎么办?

image.png

测试代码 最好用 Insert ,因为Update有条件过滤等因素添会添加测试难度,我们用插入来进行测试会比较简单些

输出结果 插入前和回滚后一样就说明成功的

image.png

这种适合有全局异常的,直接出错扔出错并且回滚

UnitOfWork: https://www.donet5.com/Home/Doc?typeId=2360

SqlSugarScope 单例模式支持跨事务方法

SqlSugarClient 需要IOC 设置 Scoped周期实现

CAP可以支持跨程序间的事务处理(非跨程序事务不建议用,涉及到队列等,在单程序中稳定性肯定不如自带的多租户事务

注意: MySql用户使用 升级到最新

1、数据库的自动释放要关闭

2、手动打开数据库连接 db.Ado.Connection.Open();

3、用db.Ado.Connection创建事务

4、把你的事务赋值到ORM对象 db.Ado.Transaction = 你的事务;

5、执行你的代码

6、关闭Connection对象

https://github.com/DotNetNext/SqlSugar/issues/1207

备份地址

https://www.donet5.com/Ask/9/23459


请不要在同步方法里面写下面方代码,必须是异步方法才行 返回是要带有Task async

用法1:

用法2:


单库模式用法

多租户模式

有外部事务,内部事务用外部事务(推荐

通过工作单元实现嵌套事务 5.1.2.5-preview03

不推荐原因:这种很容易出现坑,比如业务A和业务B都用到了一样的表就会死锁

事务嵌套:推荐用9.1或者标题10 ,9.2是不推荐的

详细用法: https://www.donet5.com/Doc/27/2537

(1)MYSQL不支持创建表和删除表处理事务,原生事务也一样

(2) MyISAM 存储引擎不支持事务 需要改成 InnoDB

image.png

版权声明


相关文章:

  • airpods使用说明教程2025-08-12 18:01:01
  • select rownum from dual2025-08-12 18:01:01
  • 直流电机必须用l298n驱动吗2025-08-12 18:01:01
  • 等级安全保护系统2025-08-12 18:01:01
  • rrt 路径规划2025-08-12 18:01:01
  • shell脚本在线加密2025-08-12 18:01:01
  • 在线编译器怎么实现2025-08-12 18:01:01
  • juc java 工具类2025-08-12 18:01:01
  • treemap hashmap linkedhashmap2025-08-12 18:01:01
  • python psutil模块2025-08-12 18:01:01