Search code examples
c#asp.net-mvcsubsonicsubsonic3

Subsonic 3 - Object of type 'System.UInt64' cannot be converted to type 'System.Boolean'


i´m using subsonic 3 trying convert a SQL2008 project to MySQL.

when the projects try execute this LINQ query :

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;
            }

        }

returns this error :

Object of type 'System.UInt64' cannot be converted to type 'System.Boolean'

in the SubSonic.Extensions Database.cs line 193:

 if (val.GetType().IsAssignableFrom(valueType)){
                            currentProp.SetValue(item, val, null);
                        } else {
                            currentProp.SetValue(item, rdr.GetValue(i).ChangeTyp

that is the table of my Database:

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;

in Debug Mode i found the error is the Ativo Field.

Any body have any idea about this ?

Many Thanks!


Solution

  • Thanks for all help, but i did a modification in the SubSonic Core to correct thus error, in the extensions.Database.cs i put one conditional if the Name of ProportyType is "System.Boolean" i use the GetBoolean Method else i use GetValue. There is the code modified below:

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

    (Line 174) Before the ValueType Conditional

    I hope this help someone! Thanks