NHibernate Sum总是舍入为整数

时间:2012-07-02 19:44:25

标签: c# nhibernate fluent-nhibernate linq-to-nhibernate

我遇到了Linq到NHibernate(C#)的总和问题。我无法得到任何总数的小数部分。我想在业务对象中求和的字段是C#decimal,数据库中的映射字段是DECIMAL(8,2)

总和不会抛出任何异常,但我只得到一个整数(我在数据库中用SQL检查,并且总和确实有小数)。

此字段的我的Fluent映射是:

Map(x => x.Importe).Column("importe").Nullable().CustomSqlType("DECIMAL(10,2)");

我尝试使用这些表达式和相应的表达式而不使用强制转换(十进制),我总是得到相同的结果(抱歉,我的业务对象是西班牙语,“importe”转换为“amount”,而“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_

我认为问题是“AS 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 个答案:

答案 0 :(得分:2)

这可能与NH-2347有关,这是我在NH 3.0中发现并在3.3.0中修复的错误。

尝试升级到最新版本。