NHibernate Linq .Where(x => x.Kind ==(byte)criteria.Value)不起作用

时间:2011-01-18 22:10:41

标签: linq nhibernate linq-to-nhibernate

停止使用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。

我必须改变什么吗?

感谢您的帮助。

最诚挚的问候,托马斯

3 个答案:

答案 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解决了这个问题。