2016-03-22 35 views
1

Yay ...我找到了ChangeConflictException: Row not found or changed問題的罪魁禍首,這個問題只發生在生產環境中。 這是所有關於NO COUNT屬性被設置爲ON在生產數據庫服務器 -ChangeConflictException:未找到或更改行 - 數據庫NO COUNT屬性

enter image description here

這個屬性被設置爲在非生產環境了,所以我沒有得到非PROD ENV任何錯誤。

問題是我們無法在生產服務器上將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

我查了一下,發現執行這個SET NOCOUNT OFF查詢似乎是一個成熟的做法,規避了服務器範圍內的無法設置的設置。

不過,我並沒有在其中找到這樣做是一勞永逸的背景下,本身就是一個解決方案,雖然這是把這個說法合適的地方:

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

公共方法SubmitChanges()(不參數)傳遞給這個可覆蓋的SubmitChanges方法(帶參數)。