我正在使用亚音速3尝试将SQL2008项目转换为MySQL。
当项目尝试执行此LINQ查询时:
public IQueryable<Marca> SelecionaMarcas()
{
try
{
return (from mc in _db.Marcas
where mc.Ativo == true
orderby mc.NomeMarca
select mc);
}
catch (Exception ex)
{
throw ex;
}
}
返回此错误:
Object of type 'System.UInt64' cannot be converted to type 'System.Boolean'
if (val.GetType().IsAssignableFrom(valueType)){
currentProp.SetValue(item, val, null);
} else {
currentProp.SetValue(item, rdr.GetValue(i).ChangeTyp
这是我的数据库表:
CREATE TABLE `marca` (
`ID_Marca` int(4) NOT NULL AUTO_INCREMENT,
`NomeMarca` varchar(100) COLLATE utf8_unicode_ci NOT NULL DEFAULT '1',
`Ativo` bit(1) NOT NULL,
`LogoMarca` varchar(250) COLLATE utf8_unicode_ci DEFAULT NULL,
PRIMARY KEY (`ID_Marca`)
) ENGINE=InnoDB AUTO_INCREMENT=132 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
在调试模式下,我发现错误是Ativo Field。
任何人都对此有任何想法?
非常感谢!
答案 0 :(得分:0)
看起来mc.Ativo
被视为UInt64
而不是bool
。唉,我不太了解SubSonic或者你是如何调用它来告诉需要改变什么来使单位列映射到bool
的。{/ p>
要修复症状,如果不是返回字段类型的根本问题,请更改
where mc.Ativo == true
到
where mc.Ativo != 0
会做你想做的事。
答案 1 :(得分:0)
我认为我之前也遇到过这个问题,亚音速不喜欢有未分配标志设置的字段。通过在模板中找到C#和DB ...之间发生类型匹配的位置,可以很容易地修复它。
答案 2 :(得分:0)
感谢所有帮助,但我在SubSonic Core中进行了修改以纠正错误,在extensions.Database.cs中,如果ProportyType的名称为“System.Boolean”,我将使用一个条件,我使用GetBoolean方法我使用GetValue。下面修改了代码:
//TO Adjust the BUG Boolean with UInt64.
Type valueType = null;
if (currentProp.PropertyType.FullName == "System.Boolean")
valueType = rdr.GetBoolean(i).GetType();
else
valueType = rdr.GetValue(i).GetType();
(第174行)在ValueType Conditional
之前
我希望这有助于某人! 感谢