是什么导致Dapper演员表失败?

时间:2018-07-10 13:51:23

标签: c# oracle dapper

我正在使用Dapper执行一个非常简单的查询:

const string query =
          "SELECT measurement From Table;";
return connection.Query<Foo>(query);

foo的定义如下:

public class Foo
{
    public object measurement { get; set; }
}

它完美地工作。如果我检查生成的对象,则Measurementdouble

但是,如果我明确地将Measurement键入为double

public class Foo
{
    public double measurement { get; set; }
}

Dapper抛出异常:

  

System.Data.DataException:'解析列0时出错   (measurement = 4.64518928527832-Double)'

由于键入对象是可行的,所以并不太令人讨厌,但我想了解是什么原因导致了这种行为。

编辑:以老式方式做同样的事情在measurement类型为Double的情况下可以很好地工作

using (connection)
            {
                connection.Open();
                var cmd = connection.CreateCommand();
                cmd.CommandText = "SELECT measurement From Table;";
                Foo foo= new Foo();
                using (IDataReader reader = cmd.ExecuteReader())
                {
                    reader.Read();
                    foo.measurement = reader.GetDouble(0);
                }
            }

Edit2:堆栈跟踪都没有

  

Dapper.SqlMapper.ThrowDataException(异常,例如Int32索引,IDataReader阅读器,对象值)

也没有内部异常

  

System.InvalidCastException /“指定的演员表无效”

非常有用。

1 个答案:

答案 0 :(得分:0)

由于@ haim770,我能够使用最简单的TypeHandler解决该问题:

public class DoubleTypeHandler : SqlMapper.TypeHandler<double>
{
    public override void SetValue(IDbDataParameter parameter, double value)
    {
        throw new NotImplementedException();
    }

    public override double Parse(object value)
    {
        return value;
    }
}