间歇性的System.Data.Entity.Infrastructure.DbUpdateConcurrencyException

时间:2015-02-22 17:13:50

标签: c# entity-framework sql-server-2008-r2

以下代码导致间歇性异常:

public int UnblockJob(int jobId)
{
    using (var connect = MakeConnect())
    {
        var tag = connect.JobTag.SingleOrDefault(jt => jt.JobId == jobId && jt.Name == Metrics.TagNameItemBlockCaller);
        if (tag == null)
        {
            return 0;
        }
        connect.JobTag.Remove(tag);
        return connect.SaveChanges();
    }
}

如何更正或排除故障?

1 个答案:

答案 0 :(得分:3)

来自DbUpdateConcurrencyException的文档:

  

DbContext当预期实体的SaveChanges将导致数据库更新但事实上数据库中没有行受到影响时抛出的异常。

这意味着您尝试删除的记录已从数据库中删除。看来您有另一个正在删除记录的进程,或者该函数可以同时调用。

有几种解决方案,以下是一对:

修复源问题停止影响数据的其他进程。

捕获错误try/catch块中包装此方法,毕竟您可能只关心该记录已被删除:

try
{
    //Existing code here
}
catch(DbUpdateConcurrencyException)
{
    //Safely ignore this exception
}
catch(Exception e)
{
    //Something else has occurred
    throw;
}