Blog
Mert Özen'in yazılım geliştirme, backend, frontend ve DevOps üzerine blog yazıları.
Dapper ve SQL Server: TVP, ANSI String'ler, {=literal} ve Parameter Sniffing
Doğru sonuç veren ama index'i baştan sona tarayan sorgular: nvarchar parameter'ların varchar kolonlarda yarattığı implicit conversion, Dapper'ın 4000 karakter kuralı, IN listelerinin plan çoğaltması, table-valued parameter'lar, {=literal} ile filtered index ve parameter sniffing — hepsi gerçek logical reads ölçümleriyle.
Dapper ile Dinamik SQL: SqlBuilder, Güvenli Filtreler ve Contrib, Dommel, Dapper Plus
Opsiyonel filtreleri string birleştirmeden kurmak: Dapper.SqlBuilder'ın template ve placeholder mantığı, aynı builder'la sayım ve sayfa sorgusu, whitelist ile güvenli sıralama ve OrWhere'in sürprizi. Ardından Dapper.Contrib, Rainbow, Dommel ve ticari Dapper Plus için Kasım 2026 itibarıyla dengeli bir değerlendirme.
Dapper Performansı: Query Cache, GetRowParser ve SqlBulkCopy, COPY ile Bulk Alternatifleri
Dapper'ın query cache'i neyi saklar ve neden testere dişi çizer, CommandFlags.NoCache ne zaman gerekir, GetRowParser ile satır başına tip seçmek ve Dapper'da olmayan bulk işlemler için SQLite'ta transaction, SQL Server'da SqlBulkCopy, PostgreSQL'de COPY — hepsi gerçek ölçümlerle, sonunda BenchmarkDotNet.
Dapper.AOT: Source Generator, Interceptor'lar ve Native AOT ile Dapper
PublishAot açıldığında vanilla Dapper neden dotnet run'da bile patlar? Dapper.AOT 1.1.0 ile kodu build sırasında üretmek: [module: DapperAot], InterceptorsNamespaces, üretilen interceptor kodu, Native AOT publish ve 49,8 ms'den 4,3 ms'ye başlangıç süresi, attribute ile type handler, DAP analyzer'ları ve QueryMultiple gibi kısıtlar.