I'm using Dapper against a database where strings are stored primarily in
VarChar columns. By default Dapper uses
NVarChar parameters when generating queries and while I can wrap each and every string parameter I use with
DbString it'd be great to use AnsiStrings by default and use
DbString for the
I tried changing the type map in the Dapper source from
DbType.AnsiString however that seems to cause an error in the IL generation for the parameters delegate (throws an
Is there an easier way to do this?
Just changing the typeMap was not sufficient I needed to alter some
if (dbType == DbType.String) checks too. Now it works!
You can accomplish this without modifying the source code.
Setting this once will adjust all of your strings to varchar.
To use ansistrings by default I had to (referring to Dapper 1.3 source from NuGet):
DbType.AnsiStringon L164 instead of
CreateParamInfoGeneratorchange the checks on L960, L968, L973 to include
DbType.AnsiStringas well as
The problem with the invalid IL seemed to be that the later branch of the code on L1000 checks for
typeof(string) whereas the preceeding branches use
Doing that everything is peachy again - no more index scans!