3

ORM として Fluent NHibernate を使用しており、NH Profiler を実行すると、この SQL クエリがスローされます。

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

ちなみに、これは絶対に正しいです。これは私の Location テーブルのデザインです:

[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.37538459999996000000 の代わりに -58.37538000000000000000 および

-34.59694680000000000000 の代わりに -34.59694000000000000000。

この挿入クエリを手動で実行すると、値が正しく挿入されます (緯度列の 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 に答える