Dapper将String参数映射为AnsiString

时间:2014-05-08 09:01:51

标签: c# ado dapper interbase

我需要将参数传递给SQL语句,使用Firebird ADO一切正常,但是使用InterBase ADO会出现问题。 我的代码:

result = conn.Query<DestClass>(sqlCmd, new
{
  stringParam = stringVal,
  intParam1 = intVal1,
  intParam2 = intVal2
}).Single();

我已经FormatException了,但是当我使用DynamicParameters定义参数并为stringParam设置DbType.AnsiString时,SQL效果很好。但是当我需要传递字符串时,我的代码中有很多地方,而且我不想在所有地方更改它。

然后我发现我可以使用Dapper.SqlMapper.AddTypeMap(typeof(String), DbType.AnsiString); 但我不能。我有Common Language Runtime detected an invalid program.

如何解决此问题?

修改

看起来问题在Dapper v1.22中得到了解决。

1 个答案:

答案 0 :(得分:3)

有人建议添加表单的程序集级别属性:

[assembly:SomeName(blah)]

将控制来自该程序集的所有类型的默认字符串类型。这可能会实现您所需要的大部分功能(尽管它会以另一种方式推动摆动,因此您需要告诉其他使用该怎么做)。我目前非常积极地黑客攻击,所以我希望这会在短期内实现。

请注意,您无需使用DynamicParameters;你也可以使用:

stringParam = new DbString { Value = stringVal, IsAnsi = true }