Domanda

Im using Fluent NHibernate as my ORM and NH Profiler is throwing me this sql query when I execute it

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

which is absolutly correct by the way. This is the design of my Location table:

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

But when I see the inserted data in sqlserver management studio, I can see it inserted

-58.37538000000000000000 instead of -58.37538459999996000000 and

-34.59694000000000000000 instead of -34.59694680000000000000.

When I execute this insert query manually, it inserts the values correctly (the 14 decimals for Lat Column) , but if nhibernate does this, it only inserts 5 decimals.

Any ideas???

È stato utile?

Soluzione

The issue comes with the default precision and scale. NHibernate default decimal representation is decimal (28,5), so that's why the final INSERT statement contains only 5 decimal places. XML mapping

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

fluent:

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

Now the INSERT statement will be decimal (23,20).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top