gpt4 book ai didi

mysql - 尝试设置从 MySQL 返回的 bool 值时,Dapper 抛出无效的转换异常

转载 作者:IT王子 更新时间:2023-10-28 23:44:53 26 4
gpt4 key购买 nike

我有这门课

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

当我运行它时,我得到了这个错误:

Error parsing column 2 (IsValidated=1 - Int64)

我已经浏览了 dapper 代码并且 sqldatareader 说该列是 int64,所以看起来 .NET Mysql 连接器认为“TRUE”(应该是 tinyint MYSQL) 是一个 int64

我确实找到了 this bug report这表示对于所有版本的 INT(INT、BIGINT、TINYINT、SMALLINT、MEDIUMINT),.NET 连接器都返回 int64。然而,这是 MySQL 5.0 中的一个错误,并且已修复,我使用的是 5.5。我有 mysql.data 版本 6.4.3.0

我已经“解决”了这个问题,方法是将其全部选择到一个临时表中,其中 IsValidated 列声明为 BOOL,但这是一个糟糕的解决方案。

最佳答案

我不熟悉 Drapper,但由于 MySQL 会将任何 bool 值作为 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)

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

关于mysql - 尝试设置从 MySQL 返回的 bool 值时,Dapper 抛出无效的转换异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7410866/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com