1、出现问题原因
接口接收入参为数组类型,遍历数组操作时,事务写在了循环里,待下一次循环时事务非此连接的事务导致出现如题错误,接口传参数组形式如下:
[
{
"id": 1,
"infos": [
{
"id": "1",
"name": "小华",
"age": "18"
}
]
},
{
"id": 2,
"infos": []
}
]
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");
}
标签:事务,更新,connection,command,信息,active,logger,trans,ex
From: https://blog.51cto.com/u_10040183/6193347