crazy_coder
Moderatör
- Katılım
- 20 Şub 2026
- Mesajlar
- 204
- Tepkime puanı
- 0
- Puanları
- 16
Dapper: Yüksek Performanslı Micro-ORM ve SQL Kontrolü
Dapper, ADO.NET'in üzerine inşa edilmiş bir kütüphanedir. EF Core gibi sizin yerinize SQL üretmez; tam tersine, sizin yazdığınız saf (raw) SQL sorgularını C# nesnelerine süper hızlı bir şekilde eşler (map eder). Bu yüzden ona "Micro-ORM" denir.
1. Neden Dapper Kullanmalıyız?
EF Core harika bir araç olsa da, bazen çok karmaşık sorgularda veya binlerce satırlık işlemlerde yavaş kalabilir. Dapper şu üç noktada öne çıkar:
[]Performans: Dapper, ADO.NET'ten sonra C# dünyasındaki en hızlı ORM'dir. Neredeyse saf bir SQL Reader hızıyla çalışır.
[]Kontrol: SQL sorgusunu siz yazdığınız için derleyicinin (ORM'in) üreteceği garip sorgularla uğraşmazsınız. Veritabanı optimizasyonu tamamen sizin elinizdedir.- Hafiflik: EF Core'daki gibi Change Tracking (değişim takibi) yoktur. Bu da bellek kullanımını minimuma indirir.
2. Temel Kullanım: Sorgu Çalıştırmak
Dapper, IDbConnection arayüzüne genişletme metotları (extension methods) ekleyerek çalışır.
C#:
using Dapper;
using Microsoft.Data.SqlClient;
public class Urun
{
public int Id { get; set; }
public string Ad { get; set; }
public decimal Fiyat { get; set; }
}
// Kullanım örneği
using (var connection = new SqlConnection("Server=.;Database=UrunDb;Trusted_Connection=True;"))
{
// Veri Çekme (Query)
var sql = "SELECT * FROM Urunler WHERE Fiyat > @MinFiyat";
var urunler = connection.Query<Urun>(sql, new { MinFiyat = 1000 }).ToList();
foreach (var urun in urunler)
{
Console.WriteLine($"{urun.Ad} - {urun.Fiyat}");
}
}
3. Veri Ekleme, Güncelleme ve Silme (Execute)
Geriye bir liste dönmeyen işlemler için Execute metodu kullanılır.
C#:
var insertSql = "INSERT INTO Urunler (Ad, Fiyat) VALUES (@Ad, @Fiyat)";
var etkilenenSatir = connection.Execute(insertSql, new { Ad = "Monitör", Fiyat = 5000 });
Console.WriteLine($"{etkilenenSatir} adet kayıt eklendi.");
4. Dapper vs EF Core: Hangisini Seçmelisiniz?
Modern projelerde genellikle her ikisi de beraber kullanılır (Hybrid Approach).
| Özellik | Entity Framework Core | Dapper |
|---|---|---|
| Hız | Hızlı (ama overhead var) | Çok Hızlı (saf SQL hızı) |
| SQL Bilgisi | Az (LINQ yeterli) | Yüksek (SQL bilmek şart) |
| Geliştirme Hızı | Hızlı (Migration, CRUD otomatik) | Orta (Sorguları manuel yazarsınız) |
| Bakım | Kolay (Code-First avantajı) | Orta (SQL'ler kod içinde veya dosyada) |
Profesyonel İpucu: Dapper Ne Zaman Şarttır?
[]Eğer uygulamanız saniyede binlerce istek alıyorsa,
[]Raporlama ekranları gibi çok karmaşık ve devasa JOIN içeren sorgularınız varsa,
[]Legacy (eski) bir veritabanına bağlanıyorsanız ve EF Core'un Code-First yapısı tablo şemasıyla uyuşmuyorsa,
[]Dapper kesinlikle en iyi seçimdir.
Sonuç
Dapper, "karmaşık ORM yapılarına ihtiyacım yok, bana hızı ve SQL kontrolünü ver" diyen yazılımcıların favorisidir. Öğrenmesi oldukça kolaydır çünkü aslında yaptığınız şey sadece temiz bir SQL yazıp onu bir nesneye bağlamaktır.