【问题标题】:NHibernate Profiler is lying to me?NHibernate Profiler 在骗我?
【发布时间】:2013-01-27 04:58:16
【问题描述】:

我使用 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 management studio中看到插入的数据时,我可以看到它插入了

-58.37538000000000000000 而不是 -58.37538459999996000000 和

-34.59694000000000000000 而不是 -34.59694680000000000000。

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

有什么想法吗???

【问题讨论】:

    标签: nhibernate fluent-nhibernate decimal nhprof


    【解决方案1】:

    默认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)

    【讨论】:

    • 谢谢!这正是我一直在寻找的。​​span>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-22
    • 2012-11-22
    • 1970-01-01
    • 2013-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多