13

文字列が主に列に格納されているデータベースに対して Dapper を使用していVarCharます。デフォルトでは、Dapper はNVarCharクエリを生成するときにパラメーターを使用します。使用するすべての文字列パラメーターをラップできますがDbString、デフォルトで AnsiStrings を使用DbStringしてNVarCharケースに使用するのは素晴らしいことです。

Dapper ソースの型マップを から に変更しようとしましたDbType.StringDbType.AnsiString、パラメーター デリゲートの IL 生成でエラーが発生するようです ( をスローしますInvalidProgramException)。

これを行う簡単な方法はありますか?

アップデート

typeMap を変更するだけでは十分ではなく、いくつかのif (dbType == DbType.String)チェックも変更する必要がありました。今それは動作します!

4

2 に答える 2

31

これは、ソース コードを変更せずに実行できます。

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

これを一度設定すると、すべての文字列が varchar に調整されます。

于 2014-10-09T15:43:04.507 に答える
3

デフォルトで ansistrings を使用するには、次のことを行う必要がありました (NuGet の Dapper 1.3 ソースを参照)。

  • DbType.AnsiString代わりに L164 で使用するタイプ マップを変更します。DbType.String
  • メソッドCreateParamInfoGeneratorで、L960、L968、L973 のチェックを変更して、 と を含めDbType.AnsiStringますDbType.String

typeof(string)無効な IL の問題は、L1000 のコードの後のブランチが をチェックするのに対し、前のブランチは を使用することであると思われましたDbType

これを行うと、すべてが再び桃色になります-インデックススキャンはもう必要ありません!

于 2011-06-20T07:50:02.530 に答える