-- C#

Dapper.NET ile Transaction Kullanımı

Merhabalar,

Dapper.NET, gelişmiş ve neredeyse doğal ADO.NET sınıfları kadar yüksek performansa sahip bir ORM aracıdır. ORM araçlarının neredeyse tamamı, performans olarak native veri erişim Framework’lerine göre daha düşük performansa sahiptir. Bunun nedeni gereksiz katmanlardan arındırılmış ve C# yeteneklerindeki genişletilmiş metotları(extension methods) kullanıyor olmasıdır. ADO.NET üzerine eklenen basit metotlar ile bir ara katman oluşturularak kaliteli ve hızlı bir alt yapı geliştirilmiştir. Geliştirici takımı ise StackOverflow.com takımıdır.

Not : SQL Server üzerinde transaction mimarisini derinlemesine öğrenmek isteyenler şuradaki makaleme ve şuradaki video eğitimlerimi inceleyebilir. Mimari olarak transaction mantığını detaylı olarak anlatıyorum.

Konumuz Dapper.NET ile Transaction kullanımıdır.

Using’e Dapper.NET namespace’ini ekleyelim;

using Dapper;

Transaction örneğini içeren Add() metodumuzu yazalım;

public void Add(Bank entity)
{
        IDbTransaction transaction = null;     // demo : transaction is defined

        try
        {
                Require.ThatNull(entity);
                Require.ThatIsNullOrEmptyOrWhiteSpace(entity.Name, true);

                string query = DynamicQuery<Bank>.GetInsertQuery(DatabaseObjects.Banks, entity);

                using (IDbConnection conn = ConnectionManager.GetOpenConnection)
                {

                        transaction = conn.BeginTransaction(); // demo : transaction start

                        conn.Execute(query, new
                        {
                                Name = entity.Name,
                                Description = entity.Description,
                                // ....
                        }, transaction); // demo : transaction is assigned

                        // Transaction ATOM'u içerisindeki diğer INSERT, UPDATE, DELETE vb. işlemleri burada yazmaya devam edin...

                        // Örnek
                        // conn.Execute(query2, veriNesnesi, transaction);
                        
                        transaction.Commit(); // demo : transaction end

                }
        }
        catch (Exception ex)
        {
                if (transaction != null)
                {
                        transaction.Rollback(); // demo : transaction rollback
                }

                _logger.Error(ex.Message);
        }
}

Metodu bir örnek olarak inceleyiniz. Burada önemli olan Dapper.NET’e ait IDbTransaction interface’i ile yapılandırılan transaction nesne örneğidir.

Not : Bu örnekte tek bir Execute metot çağrımı yapılmıştır. Ancak aynı using() scope’u içerisinde ikinci bir Execute çağrımı yapılarak transaction’ın ATOM özelliğini korumak için daha geniş bir örnek yapabailirsiniz.

İyi çalışmalar.
Cihan Özhan

Yorumla

Yorum