Transaction Scope Kullanımı

Merhabalar,

C#’da birbiriyle bağlantılı tablolarda arka arkaya veri kaydederken, aradaki bir tablonun hata vermesi büyük sorun oluşturabilir.

Örneğin;

Öğrenci notlarını girdiğiniz bir uygulamada, tüm notları aynı anda göndermek istediğinizde, herhangi bir sıradaki öğrencinin notunu integer değer değilde, string bir değer gönderdiniz, işte bu durumda o sıradaki kaydı yaparken hata oluşacaktır. Diğer değerleri kaydedilmiş fakat ondan sonrası kaydolmamış olacaktır. Bu durumda manuel olarak gidip o kayıtları silmeniz gerekecek işte böyle bir durumda roll back geri alma işlemi yapabilmek için Transaction Scope methodunu kullanıyoruz.

İki farklı şekilde basit bir kullanımı vardır;

  1. Kullanım şekli;
using (var db = new dbContext()) 
{ 
    using (var transaction = db.Database.BeginTransaction()) 
    { 
        foreach(nar not in Notes)
        {
        db.notlar.Add(not); 
        db.SaveChanges(); 
        }
    
        transaction.Commit(); 
    } 
}

2. Kullanım şekli;

 using (var transaction = new TransactioScope() ) 
    { 
        using (var db = new dbContext()) 
       { 
   
        foreach(nar not in Notes)
        {
        db.notlar.Add(not); 
        db.SaveChanges(); 
        }
    
        transaction.Complete(); 
    } 
}

Örnek;

public void DoTransaction()
{       
    try
    {
        using (TransactionScope scope = new TransactionScope())
        {
            using (con = new SqlConnection(conString1))
            {
                con.Open();
                // İşlemler 
            }
        }
    }
    catch (ThreadAbortException ex)
    {
        scope.Rollback(); // Burada bir hatayla karşılaşılması durumunda tekrar 
        yukarıdaki using bloğuna gidecektir.
        throw; throm ile hatayı yakalıyoruz.
    }
        scope.Complete(); // Uygulamamız hata almadan buraya kadar gelmişse,
        her şey yolunda demektir. Complete() methodunu kullanarak işlemi tamamlıyoruz.
}