Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Nesnelerinizde kaç değişiklik yaptığınızdan bağımsız olarak, değişiklikler yalnızca bellek içi çoğaltmalarda yapılır. Veritabanındaki gerçek verilerde hiçbir değişiklik yaptınız. Değişiklikleriniz, üzerinde açıkça çağrılana SubmitChanges kadar sunucuya DataContextiletilmez.
Bu çağrıyı DataContext yaptığınızda, değişikliklerinizi eşdeğer SQL komutlarına çevirmeye çalışır. Bu eylemleri geçersiz kılmak için kendi özel mantığınızı kullanabilirsiniz, ancak gönderim sırası değişiklik işlemcisi DataContextolarak bilinen bir hizmet tarafından düzenlenmektedir. Etkinlik dizisi aşağıdaki gibidir:
çağırdığınızda SubmitChangesLINQ to SQL, yeni örneklerin bunlara eklenip eklenmediğini belirlemek için bilinen nesneler kümesini inceler. Varsa, bu yeni örnekler izlenen nesneler kümesine eklenir.
Bekleyen değişiklikleri olan tüm nesneler, aralarındaki bağımlılıklara göre bir dizi nesne halinde sıralanır. Değişiklikleri diğer nesnelere bağımlı olan nesneler, bağımlılıklarından sonra sıralanmıştır.
Gerçek değişiklikler iletilmeden hemen önce LINQ to SQL, tek tek komut serisini kapsüllemek için bir işlem başlatır.
Nesnelerdeki değişiklikler tek tek SQL komutlarına çevrilir ve sunucuya gönderilir.
Bu noktada veritabanı tarafından algılanan hatalar gönderme işleminin durmasına neden olur ve bir özel durum oluşur. Veritabanında yapılan tüm değişiklikler, hiçbir gönderim yapılmamış gibi geri alınır. tüm DataContext değişikliklerin tam kaydına sahiptir. Bu nedenle, aşağıdaki kod örneğinde olduğu gibi sorunu düzeltmeyi deneyebilir ve yeniden çağırabilirsiniz SubmitChanges .
Örnek
Gönderimle ilgili işlem başarıyla tamamlandığında, DataContext değişiklik izleme bilgilerini yoksayarak nesnelerdeki değişiklikleri kabul eder.
Northwnd db = new Northwnd(@"c:\northwnd.mdf");
// Make changes here.
try
{
db.SubmitChanges();
}
catch (ChangeConflictException e)
{
Console.WriteLine(e.Message);
// Make some adjustments.
// ...
// Try again.
db.SubmitChanges();
}
Dim db As New Northwnd("c:\northwnd.mdf")
' Make changes here.
Sub MakeChanges()
Try
db.SubmitChanges()
Catch e As ChangeConflictException
Console.WriteLine(e.Message)
' Make some adjustments
'...
' Try again.
db.SubmitChanges()
End Try
End Sub