【发布时间】:2019-10-15 00:20:54
【问题描述】:
我正在尝试将 Dapper 与 Hana 提供程序一起使用(HANA .Net Core 2.1 ADO.NET 提供程序,参见 SAP 库“SAP HANA 客户端接口编程参考 for 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;
}
}
甚至没有调用 Mapper,所以我想在从 db 获取数据时会引发错误。
由于我无法将Serializable 属性添加到专有的源代码封闭程序集,因此有什么解决方法吗?
【问题讨论】:
-
HanaDecimal 是一个结构:help.sap.com/viewer/0eec0d68141541d1b07893a39944924e/2.0.03/…
-
@jdweng 仍然 - dapper 检测到它没有用
[Serializable]属性标记。 -
@pwas 嗨;这里是 Dapper 的主要作者;我可以看到该异常的堆栈跟踪吗?我不记得曾经检查或关心过
[Serializable];事实上:Find all "serializable", Subfolders, Find Results 1, Entire Solution, "*.*" Matching lines: 0 Matching files: 0 Total files searched: 196 -
只要属性/类是公共的,序列化程序就可以在没有 [Serializable] 的情况下工作。问题是类型错误。它不是一个小数,而是一个结构。
-
@pwas k;删除 dapper 标记,然后 - 因为这似乎不相关