我试图映射' tinyint'用'布尔'领域,但它给我下面的问题。这个问题只与本地数据库一起使用,实时数据库工作正常。我不明白问题在哪里,可能是它的地区问题。我正在使用dapper进行映射。 如果您有任何想法,请帮助我,下面是复制例外。
类型' System.Data.DataException'的第一次机会异常。发生了 在DAL.dll中其他信息:解析第15列时出错(IsBold = 1 - 为SByte)。
答案 0 :(得分:1)
原始IL(使用OpCodes.Conv_Ovf_I4
)在本地测试中正常工作;我在这里有点受阻,因为我本地没有mysql,而且我做的所有服务器都有:只有unsigned tinyint。这里有任何内部异常,或者我可以使用的其他东西吗?但是:这可能是github issues list的一个问题。
答案 1 :(得分:0)
您可以快速扩展数据类型tinyint,如下所示:
public static class IntExtensions
{
public static bool AsBool(this int value)
{
return value != 0;
}
}
然后您可以在代码中的任何位置使用它:
IsBold == 1.AsBool()
答案 2 :(得分:0)
我已经安装了MySql社区版(@@version
报告5.7.11-log
)。以下在1.50-beta9上工作正常。
[FactMySql]
public void SO36303462_Tinyint_Bools()
{
using (var conn = GetMySqlConnection(true, true, true))
{
try { conn.Execute("drop table SO36303462_Test"); } catch { }
conn.Execute("create table SO36303462_Test (Id int not null, IsBold tinyint not null);");
conn.Execute("insert SO36303462_Test (Id, IsBold) values (1,1);");
conn.Execute("insert SO36303462_Test (Id, IsBold) values (2,0);");
conn.Execute("insert SO36303462_Test (Id, IsBold) values (3,1);");
var rows = conn.Query<SO36303462>("select * from SO36303462_Test").ToDictionary(x => x.Id);
rows.Count.IsEqualTo(3);
rows[1].IsBold.IsTrue();
rows[2].IsBold.IsFalse();
rows[3].IsBold.IsTrue();
}
}
class SO36303462
{
public int Id { get; set; }
public bool IsBold { get; set; }
}
请尝试1.50-beta9。如果这不能解决问题,请帮助我重现失败的测试。