ChangeConflictException:未找到或更改行 - 数据库NO COUNT属性

时间:2016-03-22 14:56:18

标签: c# linq-to-sql

是的...我发现ChangeConflictException: Row not found or changed问题的罪魁祸首只发生在生产环境中。 所有关于NO COUNT属性都在生产数据库服务器中设置为ON -

enter image description here

在非生产环境中,此属性设置为OFF,因此我在非Prod环境中没有收到任何错误。

问题是我们无法在生产服务器上将NO COUNT属性设置为OFF因为同一服务器上有这么多其他客户端的数据库。
因此,在更新对象之前,我已将代码更新为包含SET NOCOUNT OFF -

var emp = GetEmployees(empId).FirstOrDefault();

dbContext.ExecuteQuery<int>("SET NOCOUNT OFF SELECT 1");

emp.Address = newAddress;
dbContext.SubmitChanges(); // was getting error here

但是,如果这是解决这个问题的最佳解决方案,我不是很信任 任何人都可以请建议。

谢谢!

1 个答案:

答案 0 :(得分:1)

我仔细研究了一下,发现执行这个SET NOCOUNT OFF查询似乎是在设置上绕过服务器范围的 nocount的成熟做法。

但是,我没有找到一个解决方案,在上下文中一劳永逸地完成了这个,尽管这是放置这个声明的合适位置:

public override void SubmitChanges(ConflictMode failureMode)
{
    ExecuteQuery<object>("SET NOCOUNT OFF");
    base.SubmitChanges(failureMode);
}

公共方法SubmitChanges()(不带参数)传递给这个可覆盖的SubmitChanges方法(带参数)。