2016-03-22 91 views
1

Yay ... Sadece üretim ortamında gerçekleşen ChangeConflictException: Row not found or changed sorununun suçunu buldum.ChangeConflictException: Satır bulunamadı veya değişti - Veritabanı NO COUNT özellik

enter image description here

Bu özellik olmayan Üretim ortamlarında OFF olarak ayarlandığında, bu yüzden olmayan Prod env'deki herhangi hata alıyorum değildi - Önemli olan konu NO COUNT mülkiyet Üretim veritabanı sunucusunda ON ayarlı ediliyordu.

Sorun, NO COUNT özelliğinin Üretim Sunucusu'nda OFF olarak ayarlanamamasıdır. Aynı sunucuda başka birçok istemci veritabanının bulunması nedeniyle.
Yani, nesneyi güncellemeden önce SET NOCOUNT OFF içerecek şekilde kodumu güncelledik - bu sorunun en iyi çözümü ise

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

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

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

Ancak, ben çok sırdaş değilim.
Herhangi biri tavsiyede bulunabilir.

Teşekkür ederiz!

cevap

1

Ben biraz etrafına baktı ve bu SET NOCOUNT OFF sorgu yürütülürken ayarına sunucu genelinde NOCOUNT atlatmak için köklü bir uygulama gibi görünüyor öğrendim ettik. olmadan

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

kamu yöntem SubmitChanges() (: yani bu açıklamayı koymak için uygun bir yer olmasına rağmen

Ancak, ben, bu kez ve kendi bağlamı içinde herkes için yapıldı edildiği bir çözüm bulamadık Parametreler) bu overridable SubmitChanges yöntemine (parametrelerle) geçer.