C# uygulamalarında Dapper kullanan geliştiriciler, basit gibi görünen bir performans tuzağıyla karşılaşabilirler: C# string'lerinin SQL Server index'lerini sessizce devre dışı bırakması. Sorun, Dapper'ın C# string tipini varsayılan olarak nvarchar(4000) olarak eşlemesinden kaynaklanıyor. Eğer veritabanındaki ilgili kolon varchar tipindeyse, SQL Server bir karşılaştırma yapmadan önce kolondaki her değeri nvarchar'a dönüştürmek zorunda kalır. Bu örtük dönüşüm (CONVERT_IMPLICIT), SQL Server'ın ilgili index'i kullanmasını engeller ve tam bir tablo taramasına (full scan) yol açar.
Bu durum, normalde çok hızlı olması gereken basit WHERE sorgularının bile binlerce milisaniye CPU süresi tüketmesine neden olabilir. Örneğin, milyonlarca satırlık bir tabloda ProductCode üzerinde index'li bir arama, doğru parametre tipleriyle mikro saniyeler sürerken, örtük dönüşümle on binlerce mantıksal okumaya ve saniyeler süren bir index scan'e dönüşebilir. Bu, veritabanı sunucusunun CPU kullanımında ciddi artışlara yol açar ve uygulamanın genel performansını olumsuz etkiler.
Sorun, C# kodunda tamamen görünmez olduğu için teşhisi zordur; ancak SQL Server'ın yürütme planlarında CONVERT_IMPLICIT ifadesiyle kendini gösterir. Bu durum, karmaşık sorgular veya kötü index'lenmiş tablolar yerine, sadece iki karakterlik bir tip uyuşmazlığından kaynaklanan önemli bir performans sorununa işaret eder. Geliştiricilerin, Dapper ile çalışırken parametre tiplerine dikkat etmeleri ve veritabanı kolon tipleriyle uyumlu olmalarını sağlamaları kritik öneme sahiptir.
C# ve Dapper kullanan uygulamalarda, basit bir veri tipi uyuşmazlığı SQL Server index'lerini etkisiz hale getirerek ciddi performans sorunlarına yol açabilir.