【发布时间】:2020-03-28 20:27:26
【问题描述】:
我有这样的工作:
[UnitOfWork]
public override void Execute(CompleteIRHJobArgs args)
{
var robotUserId = _userRepo.GetAll().Where(p => p.UserName == TestaLIMSWPConsts.LIMSRobot).Select(p => p.Id).First();
using (_session.Use(args.TenantId, robotUserId))
{
_instanceReciptHeaderDomainService.SetIRHToCompleteState(args.IRHIds);
}
}
我找到robotUserId 并将其设置为当前用户。但是在我进入方法SetIRHToCompleteState 之后,_session.UserId.Value 是null。我认为这是错误的行为。我的 ABP 版本是 4.0.0。
public async Task SetIRHToCompleteState(List<int> irhIds)
{
var irhs = await _instanceHeaderRepo.GetAll().Where(p => irhIds.Contains(p.Id)).ToListAsync();
foreach (var t in irhs)
{
t.FlowState = FlowState.Completed;
t.CompleteDate = Clock.Now;
t.CompleteUserId = _session.UserId.Value;
}
}
有时,
var irhs = await _instanceHeaderRepo.GetAll()...
抛出异常:
System.Transactions.TransactionInDoubtException:事务有问题。 ---> System.Data.SqlClient.SqlException:已经有一个打开的 DataReader 与此命令关联,必须先关闭。 ---> System.ComponentModel.Win32Exception: 等待操作超时
【问题讨论】:
标签: asp.net async-await aspnetboilerplate sqlexception using-statement