DapperでAnsiStringsをデフォルトで使用できますか?

c# dapper

質問

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

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

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

更新

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

受け入れられた回答

これは、ソースコードを変更することなく実行できます。

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

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


人気のある回答

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

  • DbType.AnsiStringをDbType.Stringの代わりにDbType.String使用するように型マップを変更する
  • 方法でCreateParamInfoGenerator含むことL960、L968、L973にチェックを変更DbType.AnsiStringならびにDbType.String

無効なILの問題は、L1000上のコードの後のブランチがtypeof(string)チェックし、前のブランチがDbType使用しているように見えDbType

そのすべてをやり直すのはもう一度です - それ以上のインデックススキャンはありません!



ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow