С#Dapper映射错误

时间:2018-07-30 12:40:33

标签: c# oracle mapping dapper

在我的asp.net项目中,我使用dapper从Oracle数据库获取数据。 我有一个这样的SQL请求:

select SUM(( pt.end_date - pt.start_date ) * 24 ) time_coacsh                                           
      ,SUM(( pt.end_date - pt.start_date ) * 24 )/COUNT(rc.reg_coach_id) oborot_coacsh 
from ...

和仅具有以下属性的模型:

[Column("time_coacsh")]
public Double TimeCoacsh { get; set; }

[Column("oborot_coacsh")]
public Double OborotCoacsh { get; set; }

我正在尝试通过以下方法获取对象列表:

public IEnumerable<TModel> Query<TModel>(string sql, object paramsSql = null)
{
    SqlMapper.SetTypeMap(typeof(TModel), new CustomPropertyTypeMap(typeof(TModel), BaseParamMappings.SelectProperty));

    return SqlMapper.Query<TModel>(_db, new CommandDefinition(sql, paramsSql, null, null, CommandType.Text)).ToList();
}

但是我收到此错误:

  

解析列0(TIME_COACSH = null)时出错

如果我在oracle中执行sql请求,我将获得所需的数据而没有一些null值。

在模型中,我尝试使用Float,Decimal,Double,但出现相同的错误。

1 个答案:

答案 0 :(得分:0)

我解决了这个问题。

字段time_coacshoborot_coacsh等于13,333333333333333333333333333338之类的值,即它们大约有40个小数位。 我将sql请求更改为

select round( SUM( ( pt.end_date - pt.start_date ) * 24 ),2 ) time_coacsh                                           
      ,round (SUM( ( pt.end_date - pt.start_date ) * 24 )/COUNT( rc.reg_coach_id ), 2)  oborot_coacsh

在模型中,对于这些字段,请使用Decimal类型

PS:Dapper支持Column属性