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

FmgLib.MauiMarkup mu, CommunityToolkit.Maui.Markup mı? Dürüst Bir Karşılaştırma

.NET MAUI arayüzünü XAML yerine C# ile yazmanın iki yolu var ve ikisi de akıcı (fluent) metotlar kullanıyor. Aradaki farkların neredeyse tamamı tek bir mimari tercihten doğuyor: elle seçilmiş uzantılar mı, yoksa kaynak üreteci mi? Bu yazıda farkları, her birinin hangi durumda daha iyi seçim olduğunu ve ikisinin aynı projede yan yana yaşayıp yaşayamayacağını ölçtüğümüz sonuçlarla ele alıyoruz.

Devamını Oku

Uygulamanın Tamamı Aynı Dili Konuşsun: .NET MAUI'de Üçüncü Parti Kontroller ve Kendi Fluent Metotlarınız

C# markup'ın gerçek projelerdeki en büyük sorusu: Syncfusion, UraniumUI, SkiaSharp gibi kütüphanelerin kontrolleri için fluent API kaybolur mu? Kaybolmuyor — aynı kaynak üreteci onlar için de çalışıyor. Tek satırlık opt-in'den otomatik taramaya, attached property'lerden yeniden tanımlanan property kurallarına, oradan kendi tasarım sistemi metotlarınızı yazmaya kadar tüm yolu ele alı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ı