.NET ekosisteminde veri erişim katmanı oluştururken, iki popüler teknoloji olan Dapper ve Entity Framework Core (EF Core) sıkça tercih edilir.

Dapper ve EF Core Kıyaslaması: Hangi Durumda Hangisini Kullanmalı?

.NET ekosisteminde veri erişim katmanı oluştururken, iki popüler teknoloji olan Dapper ve Entity Framework Core (EF Core) sıkça tercih edilir. Bu makalede, hem Dapper hem de EF Core'un temel farklarını açıklamak için C# kod örnekleriyle beraber avantajlarını ve dezavantajlarını ele alacağız.


Dapper ile Veri Erişimi

Dapper, hafif ve hızlı bir Micro ORM olarak bilinir. SQL sorgularını manuel olarak yazmanıza olanak tanır ve veritabanına doğrudan erişim sağlar.

Dapper Kullanımı

Dapper ile bir Product tablosundan veri çekmek için aşağıdaki gibi bir kod kullanabilirsiniz:

using System.Data.SqlClient;
using Dapper;

public class Product
{
    public int Id { get; set; }
    public string Name { get; set; }
    public decimal Price { get; set; }
}

public class DapperExample
{
    private const string ConnectionString = "YourConnectionString";

    public IEnumerable<Product> GetProducts()
    {
        using (var connection = new SqlConnection(ConnectionString))
        {
            string sql = "SELECT Id, Name, Price FROM Products";
            return connection.Query<Product>(sql);
        }
    }
}

Dapper Avantajları

  1. Performans: Dapper, minimal bir katman ekler ve doğrudan SQL sorgularını çalıştırır.
  2. Esneklik: Karmaşık sorgular kolayca yazılabilir.
  3. Basitlik: Öğrenmesi ve kullanımı oldukça kolaydır.

Dapper Dezavantajları

  • SQL sorgularını manuel olarak yazmak hata riskini artırabilir.
  • Kod tekrarını azaltmak için özel bir yapı oluşturmanız gerekebilir.

EF Core ile Veri Erişimi

EF Core, güçlü bir ORM olup veritabanı işlemlerini soyutlama katmanı üzerinden gerçekleştirir. Model tabanlı bir yaklaşım sunar ve SQL sorgularını otomatik oluşturur.

EF Core Kullanımı

EF Core ile aynı Product tablosundan veri çekmek için aşağıdaki kod kullanılabilir:

using Microsoft.EntityFrameworkCore;

public class Product
{
    public int Id { get; set; }
    public string Name { get; set; }
    public decimal Price { get; set; }
}

public class AppDbContext : DbContext
{
    public DbSet<Product> Products { get; set; }

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        optionsBuilder.UseSqlServer("YourConnectionString");
    }
}

public class EFCoreExample
{
    public IEnumerable<Product> GetProducts()
    {
        using (var context = new AppDbContext())
        {
            return context.Products.ToList();
        }
    }
}

EF Core Avantajları

  1. Soyutlama: Veritabanı yapısından bağımsız bir kodlama deneyimi sunar.
  2. Migration Desteği: Veritabanı şemalarını kolayca yönetebilirsiniz.
  3. Güçlü Özellikler: Lazy Loading, Tracking gibi yerleşik özellikler sunar.

EF Core Dezavantajları

  • Performans, Dapper kadar iyi olmayabilir.
  • Daha fazla bellek kullanır.
  • Karmaşık sorguların optimize edilmesi zor olabilir.

Kodlarla Kıyaslama

Dapper Performans Testi

Büyük veri kümeleri için performans testi:

using System.Diagnostics;

public class DapperPerformanceTest
{
    public void TestPerformance()
    {
        var stopwatch = Stopwatch.StartNew();
        var example = new DapperExample();
        var products = example.GetProducts();
        stopwatch.Stop();

        Console.WriteLine($"Dapper: {stopwatch.ElapsedMilliseconds} ms");
    }
}

EF Core Performans Testi

Aynı veri kümesi için EF Core performansı:

public class EFCorePerformanceTest
{
    public void TestPerformance()
    {
        var stopwatch = Stopwatch.StartNew();
        var example = new EFCoreExample();
        var products = example.GetProducts();
        stopwatch.Stop();

        Console.WriteLine($"EF Core: {stopwatch.ElapsedMilliseconds} ms");
    }
}

Hangi Durumda Hangisini Kullanmalı?

Dapper Kullanımı İçin Örnek Durumlar

  • Karmaşık bir sorgu yazmanız gerekiyorsa:
string sql = @"
    SELECT p.Id, p.Name, p.Price 
    FROM Products p 
    INNER JOIN Categories c ON p.CategoryId = c.Id
    WHERE c.Name = @CategoryName";
var products = connection.Query<Product>(sql, new { CategoryName = "Electronics" });

EF Core Kullanımı İçin Örnek Durumlar

  • Basit CRUD işlemleri ve uzun vadeli bakım için:
using (var context = new AppDbContext())
{
    var product = new Product { Name = "New Product", Price = 99.99m };
    context.Products.Add(product);
    context.SaveChanges();
}

Sonuç

Özellik Dapper EF Core
Performans Daha hızlı Orta seviyede
Kullanım Kolaylığı SQL bilgisi gerektirir Model tabanlıdır
Soyutlama Düşük Yüksek
Migration Desteği Yok Var
Özellikler Minimal Zengin özellik seti

Son Karar

  • Dapper: Performans ve esneklik önceliğinizse, özellikle büyük veri kümelerinde idealdir.
  • EF Core: Veri modellerini soyutlamak, bakım kolaylığı sağlamak ve uzun vadeli projelerde daha az manuel müdahale gerektiren bir yapı oluşturmak için uygundur.

Doğru seçimi yaparken projenizin ihtiyaçlarını dikkatlice değerlendirin. Performans testleri ve geliştirme süreçleri göz önünde bulundurularak, iki araç arasında bilinçli bir tercih yapılabilir.

İlgili Makaleler

Bu yazıya 0 yorum yapılmış.

Yorum Gönder