8 Kasım 2019 Cuma



Linq to SQL içerisinde "Row not found or changed" yani "Satır bulunamadı veya değiştirildi” hatası alıyorsanız


Bu hatayı aldığınızda aşağıdaki kod parçası ile çözebilirsiniz gibi görünüyor. Fakat..

try { db.SubmitChanges(ConflictMode.ContinueOnConflict); } catch (ChangeConflictException e) { Console.WriteLine("Optimistic concurrency error."); Console.WriteLine(e.Message); foreach (ObjectChangeConflict occ in db.ChangeConflicts) { MetaTable metatable = db.Mapping.GetTable(occ.Object.GetType()); Customer entityInConflict = (Customer)occ.Object; Console.WriteLine("Table name: {0}", metatable.TableName); Console.Write("Customer ID: "); Console.WriteLine(entityInConflict.CustomerID); foreach (MemberChangeConflict mcc in occ.MemberConflicts) { object currVal = mcc.CurrentValue; object origVal = mcc.OriginalValue; object databaseVal = mcc.DatabaseValue; Console.WriteLine("Member: {0}", mcc.Member.Name); Console.WriteLine("current value: {0}", currVal); Console.WriteLine("original value: {0}", origVal); Console.WriteLine("database value: {0}", databaseVal); Console.ReadLine(); } } }

db.SubmitChanges(ConflictMode.FailOnFirstConflict);

---------------------------

Bu linkten detaylara ulaşabilirsiniz: Microsoft Dökümantasyonu

Bazen bu da çözüm olmuyor. Kod hatasız tamamlanıyor fakat veriler database içerisinden update edilmiyor. Nedeni bir tablonun database ve "dbml"(LinqToSql) dosyanızda farklılık göstermesi olabilir. Büyük ihtimal database içerisinde yaptığınız bir değişikliği "dbml"dosyanıza tekrar aktarmadınız ve farklılıklar gösterdi. Yani burada belirtilen bir kayıt satırı değil bir tablonun kolonu değiştirilmiş veya bulunamadı anlamına gelebilir. 

Hatayı gidermek için önce sorun çıkaran objeyi belirlemek gerekiyor. Yukarıdaki kodda "occ.Object" size sorun çıkaran objeyi verecektir.

Hiç yorum yok:

Yorum Gönder