データベースに保存するときに、小数フィールドが小数点以下 5 桁に切り捨てられる場合があります。これは、小数点以下 10 桁の精度でマップしたにもかかわらず発生します。
SQL Server 2008 で NHibernate 3.2.0.4000 と FluentNHibernate 1.3.0.717 を使用しています。
ここに私のC#プロパティがあります:
public virtual decimal? MyDecimalField { get; set; }
自動マッピングのオーバーライドを試みました:
mapping.Map(x => x.MyDecimalField).Precision(28).Scale(10);
フィールドの明示的なマッピングも試しました:
Map(x => x.MyDecimalField).Precision(28).Scale(10);
スキーマのエクスポートを実行すると、テーブルが正しく作成されます。
create table MyTable (
Id UNIQUEIDENTIFIER not null,
MyDecimalField DECIMAL(28, 10) null,
primary key (Id)
)
5.1234567890 の値を使用して、生成された SQL 更新ステートメントからのパラメーターのスニペットを次に示します。
@p31 decimal(28,5)
@p31=5.12345
XML マッピングを使用すると、これを正しく機能させることができます。
<property name="Decimal01" precision="28" scale="10"/>
小数フィールドのすべての規則を削除しましたが、まだ問題があります。
XML ベースのマッピングが機能するため、Fluent に問題があると思われます。私が見逃したかもしれない何か他の提案はありますか?
ありがとう、スキップ