При переводе проекта на версию 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
Дело в том, что в методе Set класса ByteType (используется именно он, т.к. Хибернейт умный и узнает тип поля из маппинга) след. строчка:
((IDataParameter) cmd.Parameters[index]).Value = (byte)value;
В прочих классах Int16Type и тд такого нету – используется прямое присваивание параметра типа object, он конвертится уже дальше в BCL, более корректными методами.
Для себя эту неоднозначность исправил, засабмитил баг в трекер.
Read more: .NET разработка от devlanfear