实体框架AddOrUpdate重复的PK内部异常

时间:2017-09-29 14:56:30

标签: c# sql-server entity-framework asp.net-web-api

我有一个使用实体框架的基本web api应用程序。我每小时从api收到数百个事件,其中一些事件导致错误:

  

System.Data.Entity.Infrastructure.DbUpdateException:更新条目时发生错误。有关详细信息,请参阅内部异常---> System.Data.Entity.Core.UpdateException:更新条目时发生错误。有关详细信息,请参阅内部异常---> System.Data.SqlClient.SqlException:违反PRIMARY KEY约束' PK_dbo.ApiTable'。无法在对象' dbo.ApiTable'中插入重复键。重复键值为(123456)。   声明已经终止。

我有一个处理器来处理对使用AddOrUpdate以避免重复PK的通用存储库的调用。

处理器:

 using (var unitOfWork = new UnitOfWork())
 {
      unitOfWork.ApiTableRepository.AddOrUpdate(apiTable);

      await unitOfWork.SaveAsync();
 }

存储库:

    public virtual void AddOrUpdate(TEntity entityToUpdate)
    {
        dbSet.AddOrUpdate(entityToUpdate);
    }

我还会在每次收到事件时记录,以及该事件的PK,看起来它可能与同一时间段内同一PK的多个事件有关,尽管AddOrUpdate应该仍然照顾我的想法。以下是失败事件的日志:

  

09:36:31.979 2017-09-29 [22] INFO - 收到的活动,PK:123456

     

09:36:31.994 2017-09-29 [9] INFO - 收到的活动,PK:123456

     

09:36:32.026 2017-09-29 [9] ERROR - 尝试处理PK时出错:123456

0 个答案:

没有答案