2016-03-22 4 views
1

Yay ... Ich habe den Schuldigen von ChangeConflictException: Row not found or changed Problem gefunden, das nur in der Produktionsumgebung geschah. Es war alles über NO COUNT Eigenschaft auf ON in Produktionsdatenbankserver gesetzt wird -ChangeConflictException: Zeile nicht gefunden oder geändert - Datenbank KEINE COUNT Eigenschaft

enter image description here

Diese Eigenschaft auf OFF in Nicht-Produktionsumgebungen festgelegt ist, so dass ich keine Fehler in nicht-Prod env bekommen.

Das Problem ist, dass wir NO COUNT Eigenschaft auf OFF auf Production Server nicht festlegen können, da es so viele Datenbanken anderer Clients auf demselben Server gibt.
Also, ich habe meinen Code aktualisiert SET NOCOUNT OFF zu schließen, bevor das Objekt zu aktualisieren -

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

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

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

Ich bin aber nicht sehr Vertraute, wenn dies die beste Lösung für dieses Problem ist.
Kann jemand bitte Beratung.

Vielen Dank!

Antwort

1

Ich habe ein bisschen herum geschaut und fand heraus, dass diese SET NOCOUNT OFF Abfrage ausgeführt gut etablierte Praxis zu sein scheint eine serverweite nocount auf Einstellung zu umgehen.

aber ich fand keine Lösung, in dem dies einmal getan wurde und für alle im Kontext selbst, obwohl, dass der geeignete Ort ist diese Aussage zu setzen:

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

Die öffentliche Methode SubmitChanges() (ohne Parameter) durchläuft diese überschreibbare SubmitChanges Methode (mit Parametern).

Verwandte Themen