(我猜你的不同客户使用相同的帐户登录。)
一般异常说明;从数据库中获取一个实体,然后另一个客户端获取相同的实体。第二个客户端更新实体并提交到数据库。当第一个客户端尝试保存实体时,他有一个过时的脏实体。因此,您遇到了并发冲突!
这发生在使用乐观锁定时。并且 AspnetBoilerplate 使用该方法针对悲观锁定的性能优先级。
解决方案:在您的 TokenAuthController 类中修改 Authenticate 方法;
private static AsyncLock _asyncLock = new AsyncLock();
[HttpPost]
public async Task<AuthenticateResultModel> Authenticate([FromBody] AuthenticateModel model)
{
//i am using AsyncLock because there are async methods in Authenticate.
using (await _asyncLock.LockAsync())
{
var loginResult = await GetLoginResultAsync(
model.UserNameOrEmailAddress,
model.Password,
GetTenancyNameOrNull()
);
//other codes ...
}
}
对于 AsyncLock 库,请参见https://github.com/StephenCleary/AsyncEx