マット、
これは非常に簡単に行うことができます。SQL char スペースを消去するためにこの変更を行いました。私はそれをテストしましたが、私のコードは、変更による遅さの兆候を示していません。
最初に、既存のソース コードをバックアップして、必要な場合に簡単に元に戻せるようにしてください。
次に、次のメソッドを作成します。
public static string ReadString(object value) /*** CUSTOM CODE ***/
{
if (value == null || value is DBNull) return null;
return value.ToString().Trim();
}
コードの変更はすべて / * CUSTOM CODE * /でマークするので、後で変更を簡単に見つけることができます。
次に、次のメソッドを見つけます。
public static void SetTypeMap(Type type, ITypeMap map)
そのメソッドで次の行を見つけます。
if (memberType == typeof (char) || memberType == typeof (char?))
{
il.EmitCall(OpCodes.Call, typeof (SqlMapper).GetMethod(
memberType == typeof (char) ? "ReadChar" : "ReadNullableChar",
BindingFlags.Static | BindingFlags.Public), null);
// stack is now [target][target][typed-value]
}
else
次のように変更します。
if (memberType == typeof (char) || memberType == typeof (char?))
{
il.EmitCall(OpCodes.Call, typeof (SqlMapper).GetMethod(
memberType == typeof (char) ? "ReadChar" : "ReadNullableChar",
BindingFlags.Static | BindingFlags.Public), null);
// stack is now [target][target][typed-value]
}
else if (memberType == typeof(string)) /*** CUSTOM CODE START ***/
{
il.EmitCall(OpCodes.Call, typeof(SqlMapper).GetMethod("ReadString", BindingFlags.Static | BindingFlags.Public), null);
// stack is now [target][target][typed-value]
} /*** CUSTOM CODE END ***/
else
コンパイルすれば準備完了