문자열이 주로 VarChar
열에 저장되는 데이터베이스에 대해 Dapper를 사용하고 있습니다. 기본적으로 Dapper는 쿼리 생성시 NVarChar
매개 변수를 사용하고 DbString
과 함께 사용하는 모든 문자열 매개 변수를 래핑 할 수 있지만 기본적으로 AnsiStrings를 사용하고 NVarChar
케이스에 DbString
을 사용하는 것이 NVarChar
.
DbType.String
에 DbType.AnsiString
에서 Dapper 소스의 형식 맵을 변경하려고 시도했지만 InvalidProgramException
throw하는 매개 변수 대리자의 IL 생성에 오류가 발생할 것으로 보입니다.
이 작업을 수행하는 더 쉬운 방법이 있습니까?
최신 정보
단지 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
. 잘못된 일리노이 문제는 L1000의 코드에서 나중의 분기가 typeof(string)
검사하는 것과 같았습니다. 반면에 선행 분기는 DbType
사용했습니다.
그 모든 것을 다시하는 것은 복숭아입니다 - 더 이상 색인 스캔을하지 마십시오!