5

EFスキーマモデルとデータベースの両方で精度が4に設定されている場合、Entity Framework 4が小数点以下2桁に丸められる理由を理解しようとしています.

これは、10 進数フィールドの 1 つのスキーマ定義です。

SellPrice は 19,4 のスケールを指定します

これは私のデータベース定義です

CREATE TABLE OrderItems(
....
[SellPrice] [decimal](19, 4) NOT NULL,
....

製品の販売価格を計算した後に挿入クエリを実行すると、十分な小数があることがわかります。

SellPrice に多数の小数が表示される

MiniProfiler にクエリが表示され、値に 10 進数があることが表示されます

DECLARE ...
        @15 Decimal = '100,54347826086956521739130435',
        ...

insert [dbo].[OrderItems](..., [SellPrice], ...)
values (..., @15, ....)
select [OrderItemId]
from [dbo].[OrderItems]
where @@ROWCOUNT > 0 and [OrderItemId] = scope_identity()

しかし、Microsoft Sql Profiler を見ると、SellPrice丸められています。

exec sp_executesql N'insert [dbo].[OrderItems](..., [SellPrice], ...)
values (..., @15, ...)',
...,@15=100.54,...'

値が丸められている場所を見つけるのに苦労しています。

4

1 に答える 1

3

推測では、あなたの SQL データ型は、C#のように SQL と同じではなく、であるmoney必要があると思います。特に、MSDN のドキュメント ( http://msdn.microsoft.com/en-us/library/ms187746.aspx ) を見ると、TSQLタイプは状態です。decimaldecimaldecimaldecimal

Transact-SQL ステートメントでは、小数点を含む定数は、必要最小限の精度と位取りを使用して、自動的に数値データ値に変換されます。たとえば、定数 12.345 は、精度が 5 で位取りが 3 の数値に変換されます。

10 進数または数値から浮動小数点数または実数に変換すると、精度がいくらか失われる可能性があります。

これがあなたの問題の原因であるとは明確に述べられていませんが、私はそれが原因であると推測しています. moneyそれは最も同等であり、既存のDBからモデルを生成する場合のEFのデフォルトでもあるため、データ型でより運が良いかもしれません

于 2013-02-19T20:32:58.913 に答える