ChangeConflictException:行未找到或未更改 - 数据库无计数 属性
ChangeConflictException: Row not found or changed - Database NO COUNT property
是的...我找到了 ChangeConflictException: Row not found or changed
问题的罪魁祸首,该问题只发生在生产环境中。
这完全是关于 NO COUNT
属性 在生产数据库服务器中被设置为 ON
-
此 属性 在非生产环境中设置为关闭,因此我在非生产环境中没有收到任何错误。
问题是我们无法在生产服务器上将 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
但是,如果这是解决这个问题的最佳方案,我不是很确定。
谁能请教一下。
谢谢!
我环顾四周,发现执行此 SET NOCOUNT OFF
查询似乎是规避服务器范围 nocount on 设置的公认做法.
但是,我没有找到在上下文中一劳永逸地完成此操作的解决方案,尽管这是放置此语句的合适位置:
public override void SubmitChanges(ConflictMode failureMode)
{
ExecuteQuery<object>("SET NOCOUNT OFF");
base.SubmitChanges(failureMode);
}
public 方法 SubmitChanges()
(不带参数)传递给这个可覆盖的 SubmitChanges
方法(带参数)。
是的...我找到了 ChangeConflictException: Row not found or changed
问题的罪魁祸首,该问题只发生在生产环境中。
这完全是关于 NO COUNT
属性 在生产数据库服务器中被设置为 ON
-
此 属性 在非生产环境中设置为关闭,因此我在非生产环境中没有收到任何错误。
问题是我们无法在生产服务器上将 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
但是,如果这是解决这个问题的最佳方案,我不是很确定。
谁能请教一下。
谢谢!
我环顾四周,发现执行此 SET NOCOUNT OFF
查询似乎是规避服务器范围 nocount on 设置的公认做法.
但是,我没有找到在上下文中一劳永逸地完成此操作的解决方案,尽管这是放置此语句的合适位置:
public override void SubmitChanges(ConflictMode failureMode)
{
ExecuteQuery<object>("SET NOCOUNT OFF");
base.SubmitChanges(failureMode);
}
public 方法 SubmitChanges()
(不带参数)传递给这个可覆盖的 SubmitChanges
方法(带参数)。