1

我正在尝试将 Dapper 与 Hana 提供程序一起使用(HANA .Net Core 2.1 ADO.NET 提供程序,参见SAP 库“SAP HANA 客户端接口编程参考 for SAP HANA 平台”中的Microsoft .NET Core 支持)。休闲时一切正常,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,版本=2.4.151.0,文化=中性,PublicKeyToken=0326b8ea63db4bc4”中的类型“Sap.Data.Hana.HanaDecimal”未标记为可序列化。

我试图创建自己的类型处理程序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;
    }
}

Mapper 甚至没有被调用,所以我想从 db 获取数据时会引发错误。

由于我无法将Serializable属性添加到专有的源代码封闭程序集中,是否有任何解决方法?

4

2 回答 2

0

感谢 Marc Gravell 指导我查看堆栈跟踪,结果证明序列化是由其他人添加的,它与 dapper 没有任何关系。

Everyting 正在使用DecimalTypeHandler问题中提出的方法。

于 2019-10-14T16:20:54.287 回答
0

在查询之前添加类型处理程序:

 SqlMapper.AddTypeHandler(new DecimalTypeHandler ());
 var resultSet = hanaConnection.Query<SomeType>("some hana sql");
于 2019-10-14T10:53:03.243 回答