正如问题标题所述,即使我的存储过程返回Specified cast is not valid
和int
并且我的类定义相同,我也会得到DateTime
个异常。
public class Foo
{
public int Id {get; set;}
public DateTime CreatedDate {get; set;}
}
执行此查询时:
var results = connection.Query(“spGetFoo”,commandType:CommandType.StoredProcedure);
我得到以下两个例外:
InvalidCastException: Specified cast is not valid.
DataException: Error parsing column 1 (Id=1 - Decimal)
InvalidCastException: Specified cast is not valid.
DataException: Error parsing column 2 (CreatedDate=Mar 7 2012 5:52:08:276PM - String)
如果我将Foo
的属性从int
修改为decimal
,将DateTime
修改为string
,则会正确填充这些值。但是,这引入了一个额外的步骤,即定义另一个包含正确变量类型的类,然后从Foo
映射到新类。
我也尝试通过Dapper源代码中的GetTypeDeserializer
查看发生了什么,但我对IL发射不是很熟悉。
答案 0 :(得分:1)
问题可能在于存储过程,但在此期间您可以使用
public class Foo
{
private decimal _dbId;
public decimal DbId
{
get { return _dbId; }
set
{
_dbId = value;
_id =(int)value;
}
}
private String _dbCreadtedDate;
public String DbCreadtedDate
{
get { return _dbCreadtedDate; }
set
{
_dbCreadtedDate = value;
_createdDate = DateTime.Parse(_dbCreadtedDate);
}
}
private int _id;
public int Id
{
get { return _id; }
set { _id = value; _dbId = value; }
}
private DateTime _createdDate;
public DateTime CreatedDate
{
get { return _createdDate; }
set { _createdDate = value; _dbCreadtedDate = value.ToString(); }
}
}