NHibernate Profiler对我说谎?

时间:2013-01-27 04:58:16

标签: nhibernate fluent-nhibernate decimal nhprof

我使用Fluent NHibernate作为我的ORM和NH Profiler在执行时抛出这个SQL查询

INSERT INTO [Location]
        (Name,
         Lat,
         Lon)
VALUES      ('my address' /* @p0 */,
         -58.37538459999996 /* @p1 */,
         -34.5969468 /* @p2 */);

顺便说一句,这是绝对正确的。 这是我的位置表的设计:

[Id] [int] IDENTITY(1,1) NOT NULL,
[Name] [varchar](255) NULL,
[Lat] [decimal](23, 20) NULL,
[Lon] [decimal](23, 20) NULL,

但是当我在sqlserver管理工作室看到插入的数据时,我可以看到它被插入

-58.37538000000000000000而不是-58.37538459999996000000和

-34.59694000000000000000而不是-34.59694680000000000000。

当我手动执行此插入查询时,它会正确插入值(Lat列的14位小数),但如果nhibernate执行此操作,则只插入5位小数。

任何想法???

1 个答案:

答案 0 :(得分:4)

问题来自默认precisionscale。 NHibernate默认decimal表示为decimal (28,5),这就是为什么最终的INSERT语句只包含5个小数位。 XML映射

<property name="Lat" precision="23" scale="20" />
<property name="Lon" precision="23" scale="20" />

流利:

...
.Precision(23)
.Scale(20)

现在INSERT语句将是decimal (23,20)