2012-04-25 9 views
4

データベースに保存するときに小数点以下の桁が小数点以下5桁に切り捨てられる場合があります。これは、小数点以下10桁の精度でマップしていても発生します。小数フィールドがHibernate 3.2とFluentNHibernate 1.3で切り捨てられました

私はNHibernateは3.2.0.4000とSQL Serverのここでは2008

とFluentNHibernate 1.3.0.717を使用していますが、私のC#のプロパティがされています

public virtual decimal? MyDecimalField { get; set; } 

私は、オートマッピングの上書きをやってみました:

mapping.Map(x => x.MyDecimalField).Precision(28).Scale(10); 

私は、フィールドの明示的なマッピングをやってみました:

スキーマのエクスポートを行う、テーブルが正しく作成されます:私は

@p31 decimal(28,5) 
@p31=5.12345 

create table MyTable (
    Id UNIQUEIDENTIFIER not null, 
    MyDecimalField DECIMAL(28, 10) null, 
    primary key (Id) 
) 

が5.1234567890の値を使用して、ここで生成されたSQL UPDATE文からのパラメータの抜粋です

<property name="Decimal01" precision="28" scale="10"/> 

私はすべてのconventiを削除しました。小数フィールドのためにonsと問題がまだあります。

XMLベースのマッピングが機能するので、これがFluentの問題だと私は信じています。私が見逃したかもしれない何かの提案はありますか?

おかげで、 スキップ

+0

nullableの代わりにdecimalを使用すると発生します? – Firo

+0

@Firo - null許容の10進数で同じ問題。 – SkipHarris

+1

この違いを見る唯一の方法は、FNHが 'new PersistanceModel()を生成するものを出力することです。 model.Add(新しいClass1Map()); model.Write(Console.Out); ' – Firo

答えて

3

私はここに私自身の質問に答えるつもりです。 @Firoのおかげで、私に解決策を教えてくれたヒントをくれた。

public void Apply(IPropertyInstance instance) 
    { 
     instance.Length(350); 
    } 

しかし、私の許容基準は、小数点フィールドを除外しませんでした:

は、私は私の文字列フィールドのデフォルトの長さを設定するための規則を持っています。私は小数点以下を除外するためのいくつかの受け入れ基準を追加しました:

public void Accept(IAcceptanceCriteria<IPropertyInspector> criteria) 
    { 
     criteria 
      .Expect(x => x.Type != typeof(decimal) && x.Type != typeof(decimal?)); 
    } 

これは私の小数精度を修正しました。

興味深いのは、デフォルトの文字列の長さ350が、エクスポートされた10進数のXMLマッピングファイルに表示されないということです。しかし、FNHはまだ何とかそれを使用していたようです。これは私のFNHバグのようです。

関連する問題