The transaction associated with this command is not the connection‘s active

简介: The transaction associated with this command is not the connection‘s active

1、出现问题原因

接口接收入参为数组类型,遍历数组操作时,事务写在了循环里,待下一次循环时事务非此连接的事务导致出现如题错误,接口传参数组形式如下:

[
    {
        "id": 1,
        "infos": [
            {
                "id": "1",
                "name": "小华",
                "age": "18"
            }
        ]
    },
    {
        "id": 2,
        "infos": []
    }
]

image.gif

2、解决办法

将循环中需要更新的数据放入到列表中,在循环外用事务执行批量更新,以此使事务处于连接的活动事务中即可。部分示例代码如下:

// ...处理循环信息
var trans = _people.BeginTransaction();
try
{
    // 更新人员信息
    var updatePeople = _people.UpdateRange(updatePeopleInfoList);
    if(updatePeopleInfoList.Count == 0) updatePeople = true;
    // 更新人员附属信息
    var updatePeopleItem = _peopleItem.UpdateRange(updatePeopleItemList);
    if(updatePeopleItemList.Count == 0) updatePeopleItem = true;
    if(updatePeople && updatePeopleItem)
    {
        trans.Commit();
        _logger.LogDebug($ "[更新人员信息成功]", "111111");
    }
    else
    {
        trans.Rollback();
        _logger.LogError($ "[更新人员信息失败]{args.ToJson()}");
        return ErrorResult < long > ($ "更新人员信息失败", "111112");
    }
}
catch(Exception ex)
{
    trans.Rollback();
    _logger.LogError($ "[更新人员信息失败]{ex}", ex.Message);
    return ErrorResult < long > ("系统繁忙,请重新获取", "111150");
}

image.gif

——————————————————————————————————————————

2023-4-18 更新

上述代码采用IDbTransaction事务,可能是IDbTransaction封装有问题导致,重新排查代码,选择直接用自己封装的事务工具类,核心代码如下,自封装工具代码仓库代码量多不在此贴出来,如有需要欢迎评论区或者私信交流。

_people.BeginTransaction();
 try
 {
     var insertPeople = _people.Insert(peopleInfo);
     if(insertPeople)
     {
         _people.CommitTransaction();
     }
     else
     {
         _people.RollBackTransaction();
     }
 }
 catch(Exception ex)
 {
     _people.RollBackTransaction();
 }

image.gif

若本文有帮助到阅读本文的同学,欢迎点赞、关注、收藏,互相学习交流。

目录
相关文章
C#数据类型之枚举类型
C#数据类型之枚举类型
418 0
|
SQL Oracle 关系型数据库
避坑,Oracle中left join 与 (+) 的区别
避坑,Oracle中left join 与 (+) 的区别
|
Kubernetes Go Docker
Kubernetes 内存泄露怎么玩
Kubernetes 内存泄露怎么玩
746 0
Linux中将文件解压到指定目录
Linux中将文件解压到指定目录
|
6月前
|
人工智能 IDE JavaScript
MCP编程与AI的结合:基于Cursor的智能开发实践
本文介绍了如何通过将 Apifox MCP Server 与支持 AI 编程的 IDE(如 Cursor、VSCode + Cline 等)集成,实现 AI 直接读取和利用最新的 API 文档,从而大幅提升开发效率。文章详细说明了配置过程,包括获取 Apifox Access Token 和项目 ID,以及在 Cursor 中设置 MCP 配置的方法。此外,还展示了多个实际应用场景,例如快速生成模型代码、同步更新接口文档与代码、生成完整的 CRUD 操作、搜索 API 文档以及自动生成测试用例。
|
安全 Linux 网络安全
【工具使用】几款优秀的SSH连接客户端软件工具推荐FinalShell、Xshell、MobaXterm、OpenSSH、PUTTY、Terminus、mRemoteNG、Terminals等
【工具使用】几款优秀的SSH连接客户端软件工具推荐FinalShell、Xshell、MobaXterm、OpenSSH、PUTTY、Terminus、mRemoteNG、Terminals等
117736 0
|
存储 Java API
java 一文讲透集合框架(10万字博文)
java API常用工具之集合框架 全面总结,10万字深度讲解。
358 0
java 一文讲透集合框架(10万字博文)
|
测试技术 开发工具 虚拟化
iOS自动化测试方案(一):MacOS虚拟机保姆级安装Xcode教程
这篇文章提供了一份保姆级的教程,指导如何在MacOS虚拟机上安装Xcode,包括环境准备、基础软件安装以及USB扩展插件的使用,以实现iOS自动化测试方案的第一步。
1077 0
iOS自动化测试方案(一):MacOS虚拟机保姆级安装Xcode教程
|
网络协议 Linux 开发工具
Linux中 /etc/sysconfig/network-scripts/ifcfg-<interface> 网络接口配置 详解 看这一篇够用
Linux中 /etc/sysconfig/network-scripts/ifcfg-<interface> 网络接口配置 详解 看这一篇够用
444 1
|
监控 NoSQL MongoDB
【MongoDB】MongoDB 服务无法正常启动问题排查
【4月更文挑战第2天】【MongoDB】MongoDB 服务无法正常启动问题排查