NHibernate Сумма всегда округляется до целого
У меня проблема с суммами в Linq для NHibernate (C#). Я не могу получить десятичные части каких-либо итогов. Поле, которое я хочу суммировать в моем бизнес-объекте, является C# десятичным, а отображаемое поле в базе данных - DECIMAL(8,2).
Сумма не выдает никаких исключений, но я получаю только целое число (я проверил с SQL в базе данных, и у суммы есть десятичные дроби).
Мое свободное отображение для этого поля:
Map(x => x.Importe).Column("importe").Nullable().CustomSqlType("DECIMAL(10,2)");
Я пытался с этими и соответствующими выражениями без приведения (десятичного числа), и я всегда получал один и тот же результат (извините, мои бизнес-объекты на испанском языке, "importe" переводится как "сумма", а "vale" - что-то вроде "ваучер") знак равно
var total1 = (from vale in session.Query<Vale>()
select vale).Sum(c => c.Importe);
var total2 = (from vale in session.Query<Vale>()
select vale.Importe).Sum();
var total3 = (from vale in session.Query<Vale>()
select new { vale.Importe }).Sum(c => c.Importe);
И приведение к десятичной (и десятичной?):
var total1 = (from vale in session.Query<Vale>()
select vale).Sum(c => (decimal) c.Importe);
var total2 = (from vale in session.Query<Vale>()
select (decimal) vale.Importe).Sum();
var total3 = (from vale in session.Query<Vale>()
select new { vale.Importe }).Sum(c => (decimal) c.Importe);
Выходной SQL всегда одинаков:
SELECT CAST(SUM(vale0_.importe) AS DECIMAL) AS col_0_0_ FROM vales vale0_
Я думаю, что проблема в том, что "DECIMAL", потому что я послал этот SQL, но с "AS DECIMAL(8,2)", и я получил правильный результат, но я не знаю, как заставить NHibernate генерировать правильный SQL.
Я попытался добавить.CustomSqlType("DECIMAL(10,2)") к полю отображения и / или использовать.Precision(8).Scale(2) в отображении тоже, но ничего.
Я использую FluentNHibernate с NHibernate 3.2.0.4000 и MySQL 5.5.19
1 ответ
Это может быть связано с NH-2347, ошибкой, которую я обнаружил в NH 3.0 и исправил в 3.3.0.
Попробуйте обновить до последней версии.