我有这门课
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)
我已经完成了简洁的代码,sqldatareader 说该列是int64
,所以看起来 .NET Mysql Connector 认为“TRUE”(在 MYSQL 中应该是tinyint)是一个int64
.
我确实找到了这个错误报告 http://bugs.mysql.com/bug.php?id=13590其中表示对于所有版本的 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)
我没试过,但至少你有一个建议。一切顺利。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)