.Net Core Entity Framework Transaction Kullanımı

Posted by

Merhaba arkadaşlar, bu yazımda sizlere .Net Core Entity Framework Transaction Kullanımı konusundan bahsedeceğim.

Transaction, veri tabanı üzerinde yapacağımız ya da yaptığımız tüm işlemlere genel olarak verilen bir isimdir. Fakat bazı durumlarda işlemlerimizi sağlarken bir transaction açarak işleyişi sağlamamız gerekmektedir. Örnek vermek gerekirse birden fazla tabloya kayıt işlemi gerçekleştireceğiz ama bu kayıt atılma sırasında herhangi bir hata oluşursa, kayıtların tutarlı olması açısından bu işlemlerin hiçbirisinin gerçekleşmemesi yani Rollback olması gerekir.

Bu yazımızda Customer ve CustomerAddress tablomuz olacak. Müşteri eklerken bir de adres bilgisini ekleyeceğiz. Fakat müşteri eklendi fakat adres eklemesi gerçekleşirken bir hata oluşursa Transaction Scope içerisinde işlemlerimizi sağlayacağımız için müşteri kaydının da eklenmeyecek. Rollback işlemi gerçekleşecektir. Eğer durum başarılı ise Commit işlemi gerçekleşecek ve 2 tablo için de kayıtlarımız eklenecektir.

.Net Core 6 ile bir Console projesi oluşturuyoruz. Entities ve Data klasörlerimizi oluşturuyoruz.

Entities klasörü içerisinde iki adet sınıf tanımını gerçekleştiriyoruz.

Bu sınıflar Customer ve CustomerAddress

public class Customer
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Surname { get; set; }
    public string EmailAddress { get; set; }
}

public class CustomerAddress
{
    public int Id { get; set; }
    public int CustomerId { get; set; }
    public string FullAddress { get; set; }
}

Entity sınıflarımızı oluşturduktan sonra Context sınıfımızı Data klasöründe oluşturuyoruz.

public class EfCoreTransactionSampleContext : DbContext
{
    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        optionsBuilder.UseSqlServer(@"ConnectionStringBilgisi");
    }

    public DbSet<Customer> Customers { get; set; }
    public DbSet<CustomerAddress> CustomerAddresses { get; set; }
}

Context sınıfımızı da oluşturduktan sonra Migration işlemlerimizi yapmalı ve Veri Tabanımızı oluşturmalıyız. Bu işlemi de sağladıktan sonra Transaction kullanımını aşağıdaki gibi gerçekleştirebiliriz.

var customer = new Customer() 
{ 
    Name = "Alican", 
    Surname="Çevik", 
    EmailAddress = "info@alicancevik.com"  
};

var customerAddress = new CustomerAddress()
{
    FullAddress = "Adres Açıklaması"
};

using var context = new EfCoreTransactionSampleContext();

using var transaction = context.Database.BeginTransaction();

var addedCustomer = context.Add(customer);
addedCustomer.State = Microsoft.EntityFrameworkCore.EntityState.Added;

context.SaveChanges();

customerAddress.CustomerId = addedCustomer.Entity.Id;

context.Add(customerAddress);

context.SaveChanges();

transaction.Commit();

Context ile transaction scope tanımlaması gerçekleştiriyoruz. Customer ve CustomerAddress ekleme işlemlerimizi bu scope arasında yazıyoruz. Bu işlemler sağlanırken bir hata oluşursa işlemler iptal olacaktır. Başarılı olursa da iki tablo için de kayıtlar başarılı bir şekilde atılacaktır.

.Net Core Entity Framework Transaction Kullanımı‘nı yukarıdaki gibi sağlayabiliriz.

Umarım faydalı olur.

Bir sonraki yazıda görüşmek üzere…

Leave a Reply

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir