SQL和Dapper性能隐式转换

时间:2017-10-10 05:19:41

标签: c# sql-server orm deadlock dapper

我们如何在Dapper中阻止SQL隐式转换?

我们意识到,我们正在进行SQL隐式转换,导致索引扫描和死锁。 Dapper参数是nvarchar,而SQL表列是varchar。这导致我们所有的sql列都转换为nvarchar。

我们通过遍历所有嵌入式Dapper代码并将列转换为cast(@SSN as varchar(9)), cast(@LastName as varcarh(25)), cast(@EmployeeId as varchar(10)来修复此问题

必须有一种更简单的方法,是吗?

我读过这个博客,除了我们没有像这个例子那样设置字符串:

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

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

我们可以在连接字符串中更改某些内容吗?

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

1 个答案:

答案 0 :(得分:1)

您可以将Dapper配置为始终将字符串作为varchar而非nvarchar

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

另请参阅Can AnsiStrings be used by default with Dapper?