在Sybase ASE中使用強類型查詢參數時,Dapper會拋出無效的強制轉換異常

c# dapper

正如問題標題所述,我得到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);

我得到以下2個例外:

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 ,將DateTimestring則會正確填充值。但是,這引入了額外的步驟來定義另一個類,該類保存正確的變量類型,然後從Foo映射到新類。

我也嘗試在Dapper源代碼中查看GetTypeDeserializer ,看看發生了什麼,但我對IL發射不是很熟悉。

熱門答案

也許問題出在存儲過程中,但在此期間你可以使用

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


許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因