Können AnsiStrings standardmäßig mit Dapper verwendet werden?

8

Ich verwende Dapper für eine Datenbank, in der Strings hauptsächlich in VarChar columns gespeichert sind. Standardmäßig verwendet Dapper NVarChar -Parameter beim Generieren von Abfragen und während ich jeden String-Parameter, den ich mit DbString verwende, umschließen kann, wäre es großartig, AnsiStrings standardmäßig zu verwenden und DbString für NVarChar case.

Ich habe versucht, die Typenkartierung in der Dapper-Quelle von DbType.String auf DbType.AnsiString zu ändern, was jedoch einen Fehler in der IL-Generierung für die Parameter delegate verursacht (wirft InvalidProgramException ).

Gibt es einen einfacheren Weg, dies zu tun?

Aktualisieren

Das Ändern der typeMap war nicht ausreichend. Ich musste auch einige if (dbType == DbType.String) checks ändern. Jetzt funktioniert es!

    
John Foster 17.06.2011, 12:57
quelle

2 Antworten

18

Sie können dies erreichen, ohne den Quellcode zu ändern.

%Vor%

Wenn Sie dies einmal einstellen, werden alle Ihre Zeichenketten an varchar angepasst.

    
BillRob 09.10.2014, 15:43
quelle
3

Um ansistrings standardmäßig verwenden zu können, musste ich (siehe Dapper 1.3 source von NuGet):

  • Ändere die Typenkarte, um DbType.AnsiString auf L164 statt DbType.String zu verwenden
  • Ändern Sie in der Methode CreateParamInfoGenerator die Prüfungen in L960, L968, L973, um DbType.AnsiString sowie DbType.String .
  • einzuschließen

Das Problem mit der ungültigen IL scheint zu sein, dass der spätere Zweig des Codes auf L1000 nach typeof(string) sucht, während die vorhergehenden Zweige DbType verwenden.

Damit ist alles wieder schön - keine Index-Scans mehr!

    
John Foster 20.06.2011 07:50
quelle

Tags und Links