![](/img/trans.png)
[英]Unable to cast object of type 'System.Byte' to type 'System.UInt64'
[英]Subsonic 3 - Object of type 'System.UInt64' cannot be converted to type 'System.Boolean'
我正在使用亚音速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'
在SubSonic.Extensions Database.cs第193行中:
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字段。
有谁对此有任何想法?
非常感谢!
看起来mc.Ativo
被读为UInt64
而不是bool
。 Sub,我对SubSonic知之甚少,或者您如何调用它以告诉您需要进行哪些更改才能使一位列映射到bool
。
若要解决此症状,如果不是返回的字段类型的根本问题,请更改
where mc.Ativo == true
至
where mc.Ativo != 0
会做你想要的。
我想我之前也遇到过这个问题,亚音速不喜欢设置了未分配标志的字段。 通过查找模板中C#和DB之间发生类型匹配的位置,可以很容易地解决该问题。
感谢所有帮助,但我在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条件之前
希望对您有所帮助! 谢谢
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.