1

LinqからNHibernate(C#)への合計に問題があります。合計の小数部が取得できません。ビジネスオブジェクトで合計したいフィールドはC#10進数であり、データベースのマップされたフィールドはDECIMAL(8,2)です。

合計は例外をスローしませんが、整数のみを取得します(データベースでSQLを確認したところ、合計には小数が含まれています)。

このフィールドのFluentマッピングは次のとおりです。

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

これらの式とそれに対応するキャストなしの式(10進数)を試してみましたが、常に同じ結果が得られます(申し訳ありませんが、私のビジネスオブジェクトはスペイン語で、「importe」は「amount」に、「vale」は「voucher」のようなものに変換されます) =)

  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);

そして、10進数(および10進数?)にキャストします。

  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_

このSQLを送信したので「ASDECIMAL」だと思いますが、「AS DECIMAL(8,2)」で正しい結果が得られましたが、NHibernateに正しいSQLを生成させる方法がわかりません。

マッピングフィールドに.CustomSqlType( "DECIMAL(10,2)")を追加するか、マッピングで.Precision(8).Scale(2)を使用してみましたが、何もしませんでした。

私はFluentNHibernateをNHibernate3.2.0.4000およびMySQL5.5.19で使用しています

4

1 に答える 1

2

これは、NH 3.0 で見つけたバグであるNH-2347に関連している可能性があり、3.3.0 で修正されました。

最新バージョンにアップグレードしてみてください。

于 2012-07-02T23:36:01.173 に答える