以下代码导致间歇性异常:
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();
}
}
如何更正或排除故障?
答案 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;
}