是的...我发现ChangeConflictException: Row not found or changed
问题的罪魁祸首只发生在生产环境中。
所有关于NO COUNT
属性都在生产数据库服务器中设置为ON
-
在非生产环境中,此属性设置为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
但是,如果这是解决这个问题的最佳解决方案,我不是很信任 任何人都可以请建议。
谢谢!
答案 0 :(得分:1)
我仔细研究了一下,发现执行这个SET NOCOUNT OFF
查询似乎是在设置上绕过服务器范围的 nocount的成熟做法。
但是,我没有找到一个解决方案,在上下文中一劳永逸地完成了这个,尽管这是放置这个声明的合适位置:
public override void SubmitChanges(ConflictMode failureMode)
{
ExecuteQuery<object>("SET NOCOUNT OFF");
base.SubmitChanges(failureMode);
}
公共方法SubmitChanges()
(不带参数)传递给这个可覆盖的SubmitChanges
方法(带参数)。