NHibernate Linq. Где (x => x.Kind == (byte) критерий. Значение) не работает - PullRequest
1 голос
/ 19 января 2011

Пара работала с NHibernate 2.1. Теперь с NHibernate 3 это не так. У меня есть таблица с видом столбца, который имеет следующее отображение:

Теперь, когда я пытаюсь сделать с Linq

.Where (x => x.Kind == (byte) критерий. Значение)

где критерий. Значение является байтовым значением, я получаю исключение InvalidCastException: (не удалось выполнить запрос [выберите ... из ProjectType projecttyp0_ где projecttyp0_.Kind =? упорядочить по projecttyp0_.Name asc] Имя: p1 - Значение: 0) --->

bei NHibernate.Type.ByteType.Set (IDbCommand cmd, значение объекта, индекс Int32) в d: \ CSharp \ NH \ nhibernate \ src \ NHibernate \ Type \ ByteType.cs: Zeile 44. bei NHibernate.Type.NullableType.NullSafeSet (IDbCommand cmd, значение объекта, индекс Int32) в d: \ CSharp \ NH \ nhibernate \ src \ NHibernate \ Type \ NullableType.cs: Zeile 180. bei NHibernate.Type.NullableType.NullSafeSet (IDbCommand st, значение объекта, индекс Int32, сеанс ISessionImplementor) в d: \ CSharp \ NH \ nhibernate \ src \ NHibernate \ Type \ NullableType.cs: Zeile 139. bei NHibernate.Engine.QueryParameters.BindParameters (команда IDbCommand, запуск Int32, сеанс ISessionImplementor) в каталоге d: \ CSharp \ NH \ nhibernate \ src \ NHibernate \ Engine \ QueryParameters.cs: Zeile 638.

Должен ли я что-то изменить?

Спасибо за вашу помощь.

С наилучшими пожеланиями, Томас

Ответы [ 3 ]

2 голосов
/ 13 июля 2011

У меня была почти та же проблема: System.InvalidCastException: указанное приведение недействительно.

Мое свойство POCO было типа: байт? Мой столбец MS SQL 2005 был типа: tinyint NULL

Каждый раз, когда я запрашивал использование LINQ для NHibernate для свойства, генерировалось исключение System.InvalidCastException. Критерии API работали нормально.

Я закончила регистрацию ошибки с проектом NH

https://nhibernate.jira.com/browse/NH-2789

Видимо, в коде MS LINQ есть ошибка, приводящая байт к int.

Мой обходной путь - использовать тип (int?) В моем свойстве POCO, но оставить тип TINYINT в качестве типа базы данных.

В вашем примере критерии. Значение будет типом int вместо байта. Это позволит избежать ошибки MS LINQ.

0 голосов
/ 21 июня 2012

Ошибка, поданная @raulg, была исправлена ​​в версии 3.3.x . У меня была эта проблема сегодня с версией 3.2, и я подтвердил, что обновление до 3.3 решило эту проблему.

0 голосов
/ 19 января 2011

Какой тип criteria.Value?

Попробуйте заменить (byte)criteria.Value на Convert.ToByte(criteria.Value)

...