![](/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.