我正在尝试将Dapper与Hana提供程序(HANA .Net Core 2.1 ADO.NET提供程序,请参阅SAP库“ SAP HANA平台的SAP HANA客户端接口编程参考”中的Microsoft .NET Core Support)。随便DataReader
,一切都可以正常工作,但是当我尝试在Dapper中使用某些包含十进制类型的实体类时出现问题:
public class SomeType
{
public string Text { get; set; }
public decimal Value { get; set; }
}
var resultSet = hanaConnection.Query<SomeType>("some hana sql");
不幸的是,引发了以下异常:
程序集'Sap.Data.Hana.Core.v2.1中的'Sap.Data.Hana.HanaDecimal'类型,版本= 2.4.151.0,文化=中性,PublicKeyToken = 0326b8ea63db4bc4'未标记为可序列化。
我尝试为decimal
创建自己的类型处理程序,不走运:
public class DecimalTypeHandler : SqlMapper.TypeHandler<decimal>
{
public override decimal Parse(object value)
{
return Convert.ToDecimal(value);
}
public override void SetValue(IDbDataParameter parameter, decimal value)
{
parameter.Value = value;
}
}
甚至没有调用映射器,因此我认为从db获取数据时会引发错误。
因为我无法将Serializable
属性添加到专有的,源关闭的程序集,所以有什么解决方法?
在查询前添加类型处理程序:
SqlMapper.AddTypeHandler(new DecimalTypeHandler ());
var resultSet = hanaConnection.Query<SomeType>("some hana sql");
感谢Marc Gravell指导我窥视了堆栈跟踪,结果证明序列化是其他人添加的,并且它与dapper无关。