【问题标题】:С# Dapper Mapping ErrorС# Dapper 映射错误
【发布时间】:2019-01-06 17:13:53
【问题描述】:

在我的 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,但我得到了同样的错误。

【问题讨论】:

  • 尝试使该字段可以为空:public Double? TimeCoacsh
  • 我试过Double?float?。没有任何改变
  • 是否返回大量数据?
  • @SteveJ,没有。我用请求进行了测试,它只返回 15 行

标签: c# oracle mapping dapper


【解决方案1】:

我解决了这个问题。

字段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 属性

【讨论】:

  • 啊酷。很高兴你把它分类了。我将删除我的答案,以免误导任何人关于该属性。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多