簡體   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