使用实体框架

时间:2017-10-09 18:07:51

标签: c# asp.net entity-framework

我遇到一个问题,两个具有相同PK的记录可以在几毫秒之内通过我的程序运行,导致PK违规,因为实体框架在第一个记录发送之前检查第二条记录是否存在该行。我有一个类来处理此处显示的AddOrUpdateSaveChanges

 public async Task Process(NewEvent newEvent)
    {
        try
        {              
            _unitOfWork.UnitRepository.AddOrUpdate(newEvent);

            await _unitOfWork.SaveAsync();
        }

        catch (Exception ex)
        {
            var innerException = ex.InnerException.InnerException as SqlException;

            if (ShouldRetry(innerException))
            {    
                numRetries++;

                Logger.Warning(innerException.Message);
                Logger.Warning($"Now attempting retry #{numRetries}");

                await Process(newEvent);
            }
            else
            {
                Logger.Error($"An error occured attempting to process {newEvent.eventType}");
                throw;

            }
        }
    }

如果发生PK违规,它应该捕获异常并重试该方法,以便再次运行检查,然后第一条记录应该已经通过。但是,无论我做了多少次重试(尝试过20次),它总是无法通过检查。我等不及多久了?

Sidenote,我的界面被注册为Scoped,每次都应该处理UnitOfWork。

0 个答案:

没有答案