我在数据库中使用Dapper,其中字符串主要存储在VarChar
列中。默认情况下,Dapper在生成查询时使用NVarChar
参数,而我可以将我使用的每个字符串参数包装为DbString
,默认情况下使用AnsiStrings并使用DbString
NVarChar
案例。
我尝试将Dapper源中的类型映射从DbType.String
更改为DbType.AnsiString
但是这似乎导致参数委托的IL生成错误(抛出{{1} })。击>
有更简单的方法吗?
更新
仅仅改变typeMap是不够的我还需要改变一些InvalidProgramException
检查。现在它有效!
答案 0 :(得分:23)
您无需修改源代码即可完成此操作。
Dapper.SqlMapper.AddTypeMap(typeof(string), System.Data.DbType.AnsiString);
设置一次会将所有字符串调整为varchar。
答案 1 :(得分:3)
默认使用ansistrings我必须(参考NuGet的Dapper 1.3源代码):
DbType.AnsiString
而不是DbType.String
CreateParamInfoGenerator
中,将L960,L968,L973上的检查更改为包括DbType.AnsiString
以及DbType.String
。无效IL的问题似乎是L1000上的代码的后一分支检查typeof(string)
,而前面的分支使用DbType
。
再做一切都很好 - 不再进行索引扫描!