31 Ağustos 2023 Perşembe

Entity Framework Transaction Kullanımı

 

Entity Framework Transaction Kullanımı

Entity Framework, .NET tabanlı bir ORM (Object-Relational Mapping) aracıdır ve bir veritabanına erişim sağlamak için kullanılır. Entity Framework ile birlikte, veritabanı işlemlerini gerçekleştirmek için transaction (işlem) başlatılır.

Transaction, bir ya da birden fazla veritabanı işleminin (örneğin, ekleme, silme, güncelleme) tek bir mantıksal işlem olarak çalıştırılmasına izin veren bir yapıdır. İşlem sırasında herhangi bir hata oluşursa, işlem geri alınarak başlangıç durumuna döndürülür. Bu, veritabanı bütünlüğünü korumak için oldukça önemlidir.

Entity Framework ile transaction kullanmak için, DbContext sınıfının Database.BeginTransaction() metodu kullanılır. Bu metot, veritabanı işlemlerini başlatır ve geri alınabilir bir transaction nesnesi döndürür. Ardından, işlemler gerçekleştirilir ve işlem başarılı bir şekilde tamamlandığında, transaction.Commit() metodu kullanılarak işlem onaylanır. Hata oluşması durumunda ise, transaction.Rollback() metodu kullanılarak işlem geri alınır.

Yoğun bir şekilde veritabanı ile işlem yapıyorsanız, verilerin tutarlılığı açısından transaction kullanımı olmazsa olmazdır. Çoğu zaman önemsenmez ama production ortamında verilerin tutarsız bir şekilde kaydedilmeye başlandığında başınız epeyce ağrıyacaktır.

Örnek:

Şimdi şöyle bir senaryo düşünelim. Veri tabanında 2 tane tablomuz olsun. Bu tablolardan biri Kullanici tablosu olsun, diğeri de Firma tablosu olsun. Yani her firmanın kullanıcıları bu Kullanici tablosunda tutulsun. Dolayısıyla Firma ve Kullanici tablosu arasında bire-çok ilişkisi var.

Bu senaryoda bir tane metodunuz olsun. Bu metod önce gidip firma ekliyor. Sonrada eklediği firmaya kullanıcı ekliyor. Ama firmayı ekledikten sonra kullanıcı eklerken hataya düştü diyelim. Sonuç itibarı ile firma var ama kullanıcılar eklenmedi.

İşte böyle senaryolarda bütün işlemler bitirilmeden kayıt işlemlerini kontrol edebileceğimiz yada geri çekebileceğimiz bir yapı mevcut. Bu yapıya SQL Transaction deniyor.

Transaction Nasıl Kullanılır?

Transection objesi System.Data.Entity namespace’in altında bulunuyor. Aşagıdaki metoda bakarsanız biraz fikriniz oluşabilir. 

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
public JsonResult AxDepoHareket(int[] TABLEID, int BOLMEID)
{
    var trans = db.Database.BeginTransaction();
    try
    {
        foreach (int item in TABLEID)
        {
            var guncelle = db.TBLSTOKHAREKET.Find(item);
            guncelle.BOLMEID = BOLMEID;
            db.SaveChanges();
         }
         trans.Commit();
         return Json(new AjaxResult(true, 0, "Başarılı!", null));
     }
     catch (Exception ex)
     {
         trans.Rollback();
         Log.ExceptionLogla(ex, this.ControllerContext);
         return Json(new AjaxResult(true, 0, "Başarısız!", null));
      }
}

 Örnek koda bakıldığında metod BeginTransaction() ile başlayıp transaction açmış.

1
var trans = db.Database.BeginTransaction();

Veritabanı işlemleri bitince SaveChanges() çağırmasına rağmen Commit() çağrılmadan değişiklikler veritabanına yansımıyor taki trans.Commit() çağrılana kadar.

1
trans.Commit();

 Eğer hataya düşerse Rollback() ile yaptığı tüm işlemleri geri çekiyor.

1
trans.Rollback();

 Umarım faydalı olmuştur.

Yararlanılan kaynaklar:

Entity Framework Üzerinde TransactionScope Kullanımı 

Hiç yorum yok:

Yorum Gönder

.Net Core'da Swagger UI Kullanımı

  Web API geliştirirken API de yazılan metodların ne iş yaptığı? Hangi parametreleri aldığı? Ne cevap döndüğü? Gibi bilgilerin yer aldığı ...