【问题标题】:NHibernate Sum always rounding to integerNHibernate Sum 总是四舍五入为整数
【发布时间】:2012-07-02 19:44:24
【问题描述】:

我对 Linq to NHibernate (C#) 中的总和有疑问。我无法得到任何总数的小数部分。我要在业务对象中求和的字段是 C# 十进制,而数据库中的映射字段是 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 一起使用

【问题讨论】:

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


    【解决方案1】:

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

    尝试升级到最新版本。

    【讨论】:

    • 谢谢迭戈! (Gracias Diego!)我会试试的
    猜你喜欢
    • 1970-01-01
    • 2022-01-09
    • 1970-01-01
    • 2016-09-07
    • 2011-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多