在尝试设置从MySQL返回的布尔值时,Dapper会抛出无效的强制转换异常

时间:2011-09-14 03:12:25

标签: mysql dapper 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)

我已经逐步完成了短小精悍的代码&amp; sqldatareader说该列是int64,所以看起来.NET Mysql Connector认为'TRUE'(在MYSQL中应该是tinyint)是int64

我确实发现this bug report表示对于所有版本的INT(INT,BIGINT,TINYINT,SMALLINT,MEDIUMINT),.NET连接器返回int64。然而,这是MySQL 5.0中的一个错误。固定,我用5.5。我有mysql.data版本6.4.3.0

我已经通过将{all}全部列入IsValidated列声明为BOOL的临时表来“解决”了这个问题,但这是一个糟糕的解决方案。

1 个答案:

答案 0 :(得分:1)

我不熟悉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)

我没有试过这个,但至少你有一个建议。一切顺利。