Я не вижу ничего плохого в коде, который вы разместили.Единственное, о чем я могу думать, это то, что intObject на самом деле не является Int32 (может быть, это на самом деле Int64 или Int16 или даже десятичное число, и приведение в универсальной версии скрывает проблему), или потому что оно «упаковано» какОбъект, сериализующий его как Int32 без предварительного приведения его к Int32, вызывает некоторое странное поведение.Я бы дважды проверил, что тип соответствует фактическому типу параметра.
Если тип REALLY является правильным для объекта и вам действительно нужна динамическая типизация, попробуйте NHibernate «угадайте» типпереданное значениеСреда выполнения всегда должна знать фактический тип объекта, поэтому NH сможет обнаружить это, не указав тип IType (который может быть неправильным).Если вы уверены, что тип правильный, вы также можете рефлексивно вызвать универсальный метод, который работает в тесте:
var setParamMethod = hibQuery.GetType().GetMethod("SetParameter`1");
setParamMethod.MakeGenericMethod(myValueType)
.Invoke(nhibQuery, new object[]{"UserId", intObject});