美文网首页
AbpvNext 事务和工作单元

AbpvNext 事务和工作单元

作者: Charles2018 | 来源:发表于2023-08-06 12:31 被阅读0次

工作单元

期望效果:假设当操作出错时从“内存”回滚 撤销所有“准备”对数据库的操作

    // [UnitOfWork(IsDisabled = false)] 可以忽略 默认开启
    // 如果设置IsDisabled = true 注意uow.Begin将不起作用
    // 如果设置IsDisabled = true 也会导致当前AddTest方法 工作单元无法回滚
    public async Task<IMGroupDto?> AddTest()
    {
        // 插入到内存 直至当前AddTest方法执行结束并无BUG才会真实插入到数据库
        var e = await _groupRepository.InsertAsync(new IMGroup()
        {
            GroupName = "Test",
            GroupId = "123",
            GroupType = Enums.GroupTypeEnum.Work,
            GroupAddOpt = Enums.GroupJoinOptionsEnum.GROUP_ADD_ANY,
        });

        // 从数据库查询 注意这里的从数据库查询将返回null
        var o = await _groupRepository.FindAsync(e.Id);

        // 模拟抛出错误让当前工作单元回滚
        if (o is null) throw new NullReferenceException();

        return ObjectMapper.Map<IMGroup, IMGroupDto>(o);
    }
运行结果.png

数据库事务

期望效果:假设当操作出错时从“数据库”回滚 撤销所有"已经对数据库的更改"

    public async Task<IMGroupDto?> AddTest()
    {
        // requiresNew:true 是否开启新的 工作单元或事务
        // isTransactional:true 如果未true 就开启真实数据库事务
        using (var uow  = _unitOfWorkManager.Begin(requiresNew:true,isTransactional:true))
        {
            try
            {
                var e = await _groupRepository.InsertAsync(new IMGroup()
                {
                    GroupName = "Test",
                    GroupId = "123",
                    GroupType = Enums.GroupTypeEnum.Work,
                    GroupAddOpt = Enums.GroupJoinOptionsEnum.GROUP_ADD_ANY,
                });
                await uow.SaveChangesAsync(); // 保存到数据库

                // 从数据库查询
                var o = await _groupRepository.FindAsync(e.Id);

                throw new ApplicationException("模拟抛错");

                await uow.CompleteAsync();
                return ObjectMapper.Map<IMGroup, IMGroupDto>(o);

            }catch (Exception ex)
            {
                // 回滚
                await uow.RollbackAsync();
            }
        }
        return null;
    }
运行结果.png

相关文章

  • 数据库事务和锁

    参考链接:MySQL中Innodb的事务隔离级别和锁的关系 1. 事务 事务:事务是作为单个逻辑单元工作执行的一些...

  • 面试不知道如何回答这六大知识点,你还敢说熟悉MySQL?

    一、事务 1. 什么是事务 MySQL事务是一组sql语句或一个独立运行的工作单元。这个工作单元要么全部执行,要么...

  • Oracle之事物控制(TCL)

    TCL指的是事务控制语言。 事务是指作为单个逻辑工作单元执行的一组相关操作。事务是最小的工作单元,作为一个整体进行...

  • Redis的事务(transaction)

    Redis事务和传统事务的区别 事务我们都不陌生,对于关系型数据库来说,事务必须满足: 1.作为单个逻辑工作单元执...

  • 安卓-ObjectBox数据库笔记4:事务

    ObjectBox数据库笔记4:事务 事务可以将多个操作分组到单个工作单元中,这些工作单元要么完全执行,要么根本不...

  • mysql不得不说的事务问题总结

    定义 事务,什么是事务,它是数据库操作的最小工作单元,是作为单个逻辑工作单元的一系列操作;或者说,事务是一组不可再...

  • MySQL InnoDB 事务

    事务的定义 事务:数据库操作的最小工作单元,是作为单个逻辑工作单元执行的一系列操作; 事务是一组不可再分割的操作集...

  • SQLite 事务(Transaction)

    SQLite 事务(Transaction) 事务(Transaction)是一个对数据库执行工作单元。事务(Tr...

  • 事务以及@Transcational注解

    工作中的许多业务逻辑,可能会用到事务。事务的概念:事务,是指作为单个逻辑工作单元执行的一系列操作,结果只有成功和失...

  • 关于mysql数据库锁的完全解读

    一、事务简介 1、事务简介 事务(Transaction) 是指作为单个逻辑工作单元执行的一系列操作。 2、事务的...

网友评论

      本文标题:AbpvNext 事务和工作单元

      本文链接:https://www.haomeiwen.com/subject/wgzipdtx.html