Conversión implícita de rendimiento de SQL y Dapper

c# dapper deadlock orm sql-server

Pregunta

¿Cómo evitamos las conversiones implícitas de SQL en Dapper?

Nos dimos cuenta de que estábamos llevando a cabo una conversión implícita de SQL, lo que causaba una exploración de índice y bloqueos. Los parámetros Dapper son nvarchar, mientras que las columnas SQL table son varchar. Esto causó que todas nuestras columnas sql se convirtieran en nvarchar.

Solucionamos el problema pasando por todo nuestro código Dapper incrustado y convirtiendo columnas como cast(@SSN as varchar(9)), cast(@LastName as varcarh(25)), cast(@EmployeeId as varchar(10)

Tiene que haber una manera más fácil, ¿verdad?

Leí este blog, excepto que no estamos estableciendo cadenas como este ejemplo:

new { queryPlanHash = args[0], startDate = DateTime.Today.AddDays(-7) });

https://www.codeproject.com/articles/594133/bepluscarefulpluswithplusvarcharsplusinplusdapper

¿Hay algo que podamos cambiar en la cadena de conexión?

FinanceConnectionString "providerName="System.Data.SqlClient" connectionString="Data Source=(local);Initial Catalog=FinanceData;integrated security=SSPI;persist security info=False; Trusted_Connection=Yes" />

Respuesta aceptada

Puede configurar Dapper para enviar sus cadenas siempre como varchar en lugar de nvarchar

Dapper.SqlMapper.AddTypeMap(typeof(string), System.Data.DbType.AnsiString);

Por favor, consulte también ¿Se puede utilizar AnsiStrings por defecto con Dapper?



Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué