停止使用NHibernate 2.1。现在使用NHibernate 3它没有。 我有一个带有列类的表,它具有以下映射:
现在,当我尝试使用Linq时
.Where(x => x.Kind ==(byte)criteria.Value)
其中criteria.Value是一个字节值,我得到一个InvalidCastException :(无法执行查询 [select ... from ProjectType projecttyp0_ where projecttyp0_.Kind =?按projecttyp0_.Name asc排序] 名称:p1 - 值:0)--->
bei NHibernate.Type.ByteType.Set(IDbCommand cmd,Object value,Int32 index)在d:\ CSharp \ NH \ nhibernate \ src \ NHibernate \ Type \ ByteType.cs:Zeile 44。 bei NHibernate.Type.NullableType.NullSafeSet(IDbCommand cmd,Object value,Int32 index)在d:\ CSharp \ NH \ nhibernate \ src \ NHibernate \ Type \ NullableType.cs:Zeile 180。 bei NHibernate.Type.NullableType.NullSafeSet(IDbCommand st,Object value,Int32 index,ISessionImplementor session)在d:\ CSharp \ NH \ nhibernate \ src \ NHibernate \ Type \ NullableType.cs:Zeile 139。 bei NHibernate.Engine.QueryParameters.BindParameters(IDbCommand命令,Int32 start,ISessionImplementor会话)在d:\ CSharp \ NH \ nhibernate \ src \ NHibernate \ Engine \ QueryParameters.cs:Zeile 638。
我必须改变什么吗?
感谢您的帮助。
最诚挚的问候,托马斯
答案 0 :(得分:2)
我遇到了几乎相同的问题:System.InvalidCastException:指定的强制转换无效。
我的POCO属性是type:byte? 我的MS SQL 2005列是type:tinyint NULL
每次我在属性上查询使用LINQ to NHibernate时,都会抛出System.InvalidCastException。 Criteria API工作正常。
我最终提交了一份带有NH项目的错误
https://nhibernate.jira.com/browse/NH-2789
显然,MS LINQ代码中存在一个错误,将字节转换为int。
我的解决方法是在我的POCO属性上使用类型(int?),但将TINYINT保留为数据库类型。
在您的示例中,criteria.Value将是int类型而不是byte。这将避免MS LINQ错误。
答案 1 :(得分:0)
criteria.Value
是什么类型的?
尝试将(byte)criteria.Value
替换为Convert.ToByte(criteria.Value)
答案 2 :(得分:0)
@raulg提交的错误是resolved with version 3.3.x。我今天遇到了3.2版本的问题,并确认升级到3.3解决了这个问题。