在Sybase ASE中使用强类型查询参数时,Dapper会抛出无效的强制转换异常

时间:2012-03-07 23:27:50

标签: c# dapper

正如问题标题所述,即使我的存储过程返回Specified cast is not validint并且我的类定义相同,我也会得到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发射不是很熟悉。

1 个答案:

答案 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(); } 
    }
}