Dapperは、MySQLから返されたブール値を設定しようとすると、無効なキャスト例外をスローしています

dapper mysql mysql.data

質問

私はこのクラスを持っている

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

そして私はこのSQLをdapperを使って実装しています:

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

私がこれを実行すると、私はこのエラーになります:

列2の解析中にエラーが発生しました(IsValidated = 1〜Int64)

私は大胆なコードを踏みとどめました。sqldatareaderはその列がint64であると言っています。 int64 、.NET int64 Connectorは 'TRUE'(MYSQLのtinyintでなければなりません)がint64であるとint64です。

私はINT(INT、BIGINT、TINYINT、SMALLINT、MEDIUMINT)のすべてのバージョンで、.NETコネクタがint64を返していたというこのバグレポートを見つけました。しかし、これはMySQL 5.0のバグであり、修正されました。私は5.5を使用しています。私はmysql.dataバージョン6.4.3.0を持っている

私はBOOLとして宣言されたIsValidatedカラムを持つ一時テーブルにすべてを選択することでこの問題を "解決"しましたが、これはIsValidated解決策です。

人気のある回答

私はDrapperに慣れていませんが、MySQLはint(通常はtinyint)としてbooleanを返しますので、クラスを次のように変更することもできます:

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
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow