我有这样的工作:
[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 =等待_instanceHeaderRepo.Getall()...
引发异常:
System.Transactions.TransactionInDoubtException:交易有疑问。 ---> System.Data.SqlClient.SqlException:已存在与此Command关联的打开的DataReader,必须首先将其关闭。 ---> System.ComponentModel.win32exception:等待操作超时