我正在使用Dapper执行一个非常简单的查询:
const string query =
"SELECT measurement From Table;";
return connection.Query<Foo>(query);
foo
的定义如下:
public class Foo
{
public object measurement { get; set; }
}
它完美地工作。如果我检查生成的对象,则Measurement
是double
。
但是,如果我明确地将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 /“指定的演员表无效”
非常有用。
答案 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;
}
}