在嘗試設置從MySQL返回的布爾值時,Dapper會拋出無效的強制轉換異常

dapper mysql mysql.data

我有這門課

public class User
{
    public int UserId { get; set; }
    public string UserName { get; set; }
    public bool IsValidated { get; set; }
}

我用dapper用這個sql填充它:

var users = connection.Query<User>("SELECT userId, userName, TRUE `IsValidated` FROM user WHERE [...]").ToList();

當我運行這個時,我收到此錯誤:

解析第2列時出錯(IsValidated = 1 - Int64)

我已經逐步完成了dapper代碼並且sqldatareader說該列是int64 ,所以看起來.NET Mysql Connector認為'TRUE'(在MYSQL中應該是tinyint)是一個int64

我確實找到了這個錯誤報告 ,它說對於所有版本的INT(INT,BIGINT,TINYINT,SMALLINT,MEDIUMINT),.NET連接器返回int64。然而,這是MySQL 5.0中的一個錯誤並且已修復,我正在使用5.5。我有mysql.data版本6.4.3.0

我已經“解決”了這個問題,將它全部選擇到一個臨時表中,並將IsValidated列聲明為BOOL ,但這是一個糟糕的解決方案。

熱門答案

我不熟悉Drapper,但由於MySQL會將任何布爾值作為int(通常為tinyint)返回,因此一個選項可能是將您的類更改為以下內容:

public class User  
{  
    public int UserId { get; set; }  
    public string UserName { get; set; }
    private bool _isValidated = false;
    public bool IsValidated
    { 
        get{ return _isValidated;}
        set{ _isValidated = Boolean.Parse(value); }
   }  
}  

或者在sql中嘗試強制轉換

cast(TRUE `IsValidated` as bit)

我沒有試過這個,但至少你有一個建議。祝一切順利。



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