可以使用Dapper默認使用AnsiStrings嗎?

c# dapper

我正在使用Dapper對數據庫,其中字符串主要存儲在VarChar列中。默認情況下,Dapper在生成查詢時使用NVarChar參數,雖然我可以將我使用的每個字符串參數包裝在DbString但默認情況下使用AnsiStrings並使用DbString作為NVarChar案例NVarChar

我嘗試將Dapper源中的類型映射從DbType.StringDbType.AnsiString但是這似乎導致參數委託的IL生成錯誤(拋出InvalidProgramException )。

有更簡單的方法嗎?

更新

只是改變typeMap是不夠的我需要改變一些if (dbType == DbType.String)檢查。現在它有效!

一般承認的答案

您無需修改源代碼即可完成此操作。

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

設置一次會將所有字符串調整為varchar。


熱門答案

要默認使用ansistrings,我必須(參考NuGet的Dapper 1.3源代碼):

  • 改變的類型映射使用DbType.AnsiString的L164而不是DbType.String
  • 在方法CreateParamInfoGenerator將L960,L968,L973上的檢查更改為包括DbType.AnsiString以及DbType.String

無效IL的問題似乎是L1000上的代碼的後一分支檢查typeof(string)而前面的分支使用DbType

做到這一切再次變得很好 - 沒有更多的索引掃描!



許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因