3

我使用 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 位小数。

有任何想法吗???

4

1 回答 1

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

于 2013-01-27T06:57:27.550 回答