Monday, January 10, 2011

Неприятный баг в NHibernate 3.0: приведение типов

При переводе проекта на версию NHibernate 3.0 столкнулся с неприятным багом: если использовать значение типа int в методе SetParameter (установка именованого параметра запроса) для выборки по полю типа byte получим исключение: Specified cast is not valid. В версии 2.0 такой проблемы не было.

Дело в том, что в методе Set класса ByteType (используется именно он, т.к. Хибернейт умный и узнает тип поля из маппинга) след. строчка:

((IDataParameter) cmd.Parameters[index]).Value = (byte)value;

В прочих классах Int16Type и тд такого нету – используется прямое присваивание параметра типа object, он конвертится уже дальше в BCL, более корректными методами.
Для себя эту неоднозначность исправил, засабмитил баг в трекер.

Read more: .NET разработка от devlanfear