Entity Framework'te SaveChanges() kullanımı çok sıktır ve tek bir veri değişikliği veya silindikten sonra SaveChanges() çağrısı etki kayıtlarının sayısını döndürür.
Toplu modifikasyon veya toplu verilerin silinmesini kullanmak için SaveChanges(false)+AcceptAllChanges() yöntemine ihtiyacınız var.
SaveChanges(false), EF'nin veritabanında bir işlem yapması gerektiğine dair bir bildirimdir; bu işlem bellekte bekte ve gerektiğinde geri alınabilir; örneğin AcceptAllChange() commit gerçekten başarılı olur ve EF SaveChanges(false) işlemini geri alır.
Dağıtık işlem işlemleriyle uğraşırken, bunu yönetmek için TransactionScope kullanmak gereklidir ve çoğu zaman şöyle yazacağız:
Ama böyle yazmak riskli, yanlış Örneğin, bağlam1. SaveChanges() başarılı oldu, bağlam2. SaveChanges() sorunlu, kapsamdayız. Complete() işlemi tamamlandığında ve Context1 başarıyla yürütüldüğünde sonlanacaktır
(Benim pratiğimde, yukarıdakiler aslında normal şekilde geri alınabilir, bağlam varsa1. SaveChanges() başarılı oldu, bağlam2. SaveChanges() sorunlu, hiçbiri başarılı şekilde yürütülmez! Projenizde System.Transaction ismspace kullanma sayfasına başvurun. Bir TransactionScope'u tanımlamak, bir kapsamı tanımlamaya eşdeğerdir; yani bu işlemin kapsamı kullanım içindedir. Kullanım kapsamında, eğer bir kapsam yoksa. Complete() komutunu uygularsanız, dürbün yok edildiğinde otomatik olarak tüm işlemleri geri alır. ) Bu ihtiyaclarımızı karşılamayabilir. Bağlam1 ve bağlam2'nin aynı anda başarılı şekilde çalıştırılması gerekiyorsa ya da hiçbiri başarılı olmazsa, kodda küçük ayarlamalar yapmamız gerekir, örneğin aşağıdaki kodu kullanmamız gerekir:
SaveChanges(false) kullanarak gerekli veritabanı işlem komutlarını önce veritabanına gönderiyoruz; bu da bağlam1 ve bağlam2'nin aslında değişmediğini, işlem sonlandırılıp otomatik olarak geri alındığında, hiçbir değişiklik veritabanına bağlanmaz, böylece başarıyla geri alınabilir.
|