Dapper에서 AnsiStrings를 기본적으로 사용할 수 있습니까?

c# dapper

문제

문자열이 주로 VarChar 열에 저장되는 데이터베이스에 대해 Dapper를 사용하고 있습니다. 기본적으로 Dapper는 쿼리 생성시 NVarChar 매개 변수를 사용하고 DbString 과 함께 사용하는 모든 문자열 매개 변수를 래핑 할 수 있지만 기본적으로 AnsiStrings를 사용하고 NVarChar 케이스에 DbString 을 사용하는 것이 NVarChar .

DbType.StringDbType.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 사용했습니다.

그 모든 것을 다시하는 것은 복숭아입니다 - 더 이상 색인 스캔을하지 마십시오!




아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.