繁体   English   中英

亚超音速3-无法将类型为'System.UInt64'的对象转换为类型为'System.Boolean'

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM