VodiSoft
Entity Framework Core (EF Core) ve Dapper, .NET ekosisteminde en çok kullanılan veri erişim teknolojileridir. Ancak hangisinin daha hızlı olduğu, hangi senaryolarda tercih edilmesi gerektiği ve performans açısından aralarındaki farklar sıklıkla tartışılır. Bu yazıda EF Core ve Dapper'ın mimarilerini, performans özelliklerini, kullanım kolaylıklarını, bakım maliyetlerini ve gerçek dünya senaryolarındaki avantajlarını detaylı olarak inceliyoruz.

EF Core vs Dapper: Hangisini Ne Zaman Kullanmalısınız?

.NET ekosisteminde veritabanı işlemleri denildiğinde akla gelen ilk iki teknoloji genellikle Entity Framework Core (EF Core) ve Dapper olur.

Birçok geliştirici şu sorunun cevabını arar:

EF Core mu kullanmalıyım yoksa Dapper mı?

Aslında bu sorunun tek bir doğru cevabı yoktur. Çünkü her iki teknoloji de farklı ihtiyaçları çözmek için tasarlanmıştır.

Bu yazıda EF Core ve Dapper'ı detaylı olarak inceleyecek, performans karşılaştırmalarına değinecek ve hangi senaryoda hangisinin tercih edilmesi gerektiğini açıklayacağız.


EF Core Nedir?

Entity Framework Core, Microsoft tarafından geliştirilen modern bir ORM'dir (Object Relational Mapper).

ORM'ler veritabanındaki tabloları nesnelere dönüştürerek SQL yazmadan veri işlemleri yapabilmemizi sağlar.

Örneğin aşağıdaki tabloyu düşünelim:

Id Name
1 Mustafa
2 Ahmet

EF Core ile:

var users = await dbContext.Users.ToListAsync();

şeklinde veri çekebiliriz.

EF Core gerekli SQL sorgusunu otomatik olarak oluşturur.


Dapper Nedir?

Dapper, Stack Overflow ekibi tarafından geliştirilmiş hafif (Micro ORM) bir veri erişim kütüphanesidir.

EF Core'un aksine SQL yazımını geliştiriciye bırakır.

Örnek:

using var connection = new SqlConnection(connectionString);

var users = await connection.QueryAsync<User>(
    "SELECT * FROM Users");

Burada SQL sorgusunu doğrudan biz yazıyoruz.

Dapper yalnızca sonucu nesnelere map etmektedir.


Temel Farklar

Özellik EF Core Dapper
ORM Türü Full ORM Micro ORM
SQL Yazımı Opsiyonel Zorunlu
Öğrenme Eğrisi Düşük Orta
Performans İyi Çok Yüksek
Migration Desteği Var Yok
Change Tracking Var Yok
LINQ Desteği Var Yok
Karmaşık Query Kontrolü Orta Çok Yüksek
Bakım Kolaylığı Yüksek Orta

Performans Karşılaştırması

Dapper'ın popüler olmasının en büyük sebebi performanstır.

Çünkü:

  • SQL doğrudan çalıştırılır.
  • Change Tracking yoktur.
  • Expression Tree üretimi yoktur.
  • LINQ çevirisi yapılmaz.
  • ORM katmanı oldukça küçüktür.

Özellikle büyük veri setlerinde fark hissedilir hale gelir.

Örnek:

100.000 kayıt okunan bir senaryoda:

Teknoloji Ortalama Süre
Dapper 40-80 ms
EF Core 70-150 ms

Bu değerler:

  • Sunucuya
  • Veritabanına
  • Query yapısına
  • Ağ gecikmesine

göre değişiklik gösterebilir.

Gerçek hayatta çoğu uygulamada fark milisaniyeler seviyesindedir.


EF Core'un Performansını Artırmak

Birçok geliştirici EF Core'un yavaş olduğunu düşünür.

Aslında doğru kullanıldığında oldukça başarılı sonuçlar elde edilebilir.

AsNoTracking Kullanımı

var users = await dbContext.Users
    .AsNoTracking()
    .ToListAsync();

Sadece okuma işlemlerinde performansı ciddi şekilde artırır.


Select Projection Kullanımı

Yanlış:

var users = await dbContext.Users.ToListAsync();

Doğru:

var users = await dbContext.Users
    .Select(x => new UserDto
    {
        Id = x.Id,
        Name = x.Name
    })
    .ToListAsync();

Gereksiz kolonlar çekilmez.


Compiled Queries

Sık kullanılan sorgular için:

private static readonly Func<AppDbContext, int, Task<User?>>
GetUserById =
    EF.CompileAsyncQuery(
        (AppDbContext db, int id) =>
            db.Users.FirstOrDefault(x => x.Id == id));

ek performans sağlar.


Dapper'ın Avantajları

Maksimum Performans

Dapper'ın en büyük avantajıdır.

Özellikle:

  • Dashboard uygulamaları
  • Raporlama sistemleri
  • Finans uygulamaları
  • Gerçek zamanlı sistemler

için oldukça uygundur.


SQL Kontrolü

Tam kontrol geliştiricidedir.

SELECT
    u.Id,
    u.Name,
    COUNT(o.Id) OrderCount
FROM Users u
LEFT JOIN Orders o ON o.UserId = u.Id
GROUP BY u.Id, u.Name

Yazılan SQL'in birebir çalışacağını bilirsiniz.


Daha Az Soyutlama

Bazı ekipler SQL'i gizlemek yerine doğrudan kullanmayı tercih eder.

Dapper burada büyük avantaj sağlar.


EF Core'un Avantajları

Hızlı Geliştirme

CRUD işlemleri son derece hızlı yazılır.

dbContext.Users.Add(user);

await dbContext.SaveChangesAsync();

Migration Desteği

dotnet ef migrations add InitialCreate

dotnet ef database update

Veritabanı şeması kod üzerinden yönetilebilir.


LINQ Desteği

var activeUsers = await dbContext.Users
    .Where(x => x.IsActive)
    .OrderBy(x => x.Name)
    .ToListAsync();

Okunabilirlik oldukça yüksektir.


Change Tracking

EF Core değişiklikleri otomatik takip eder.

user.Name = "Yeni İsim";

await dbContext.SaveChangesAsync();

Ek UPDATE sorgusu yazmaya gerek kalmaz.


Ne Zaman EF Core Kullanılmalı?

Aşağıdaki durumlarda EF Core genellikle daha mantıklıdır:

  • Kurumsal uygulamalar
  • ERP sistemleri
  • CRM sistemleri
  • Yönetim panelleri
  • İç operasyon uygulamaları
  • Hızlı geliştirilmesi gereken projeler
  • Büyük ekiplerle geliştirilen sistemler

Çünkü bakım maliyeti daha düşüktür.


Ne Zaman Dapper Kullanılmalı?

Aşağıdaki senaryolarda Dapper öne çıkar:

  • Yüksek trafikli API'ler
  • Finans uygulamaları
  • Raporlama sistemleri
  • Büyük veri sorguları
  • Gerçek zamanlı uygulamalar
  • Performansın kritik olduğu servisler

Hibrit Kullanım (En Yaygın Yaklaşım)

Aslında birçok büyük projede seçim “EF Core veya Dapper” değildir.

İkisi birlikte kullanılır.

Örnek:

  • Write işlemleri → EF Core
  • Read işlemleri → Dapper

Bu yaklaşım özellikle CQRS mimarisinde oldukça yaygındır.

Commands  -> EF Core
Queries   -> Dapper

Böylece:

  • Geliştirme hızı korunur.
  • Performans kritik sorgular optimize edilir.

Sonuç

EF Core ve Dapper rakip değil, farklı problemlere çözüm üreten araçlardır.

Özetlemek gerekirse:

  • Hızlı geliştirme istiyorsanız → EF Core
  • Maksimum performans istiyorsanız → Dapper
  • Büyük ölçekli sistemlerde → EF Core + Dapper birlikte

Günümüzde birçok kurumsal projede EF Core ana ORM olarak kullanılırken, performans kritik sorgular Dapper ile optimize edilmektedir.

Doğru seçim, kullandığınız teknoloji değil, çözmeye çalıştığınız problemdir.

İlgili Yazılar

C# Union Types Nedir? Modern .NET Uygulamalarında Type-Safe State Yönetimi

Bu yazıda C# dünyasına gelen Union Types yapısını en ince ayrıntısına kadar inceliyoruz. Union Type nedir, hangi problemleri çözer, class ve record yapılarından farkı nedir, API response modellerinde nasıl kullanılır, Result Pattern ile ilişkisi nedir, ne zaman kullanılmalı ve hangi durumlarda tercih edilmemelidir gibi konuları gerçek proje örnekleriyle detaylı şekilde ele alıyoruz. Ayrıca payment, login, validation, CQRS, domain-driven design ve state management gibi modern .NET senaryolarında Union Types kullanımını profesyonel mimari bakış açısıyla açıklıyoruz.

Devamını Oku

VodiSoft

Yazılım projenizi gelir üreten bir ürüne dönüştürelim

Web, mobil, .NET, SaaS ve entegrasyon projeleri için teknik keşif yapalım; riskleri, takvimi ve en hızlı ticari kazanımı netleştirelim.

Teklif Al Toplantı