2017-05-30 15 views
1

私のコードファーストエンティティフレームワークのSQLデータベースでは、18.3と指定された10進値があります。 データベースオブジェクト:OnModelCreatingでエンティティフレームワーク6の小数点精度

public decimal? Kolhalt { get; set; } 

I値はKolhaltとして指定されたデータベースで

 modelBuilder.Entity<Skada>().Property(o => o.Kolhalt).HasPrecision(18, 3); 

を有する(DECIMAL(18、3)、NULL)

Iの値を入力した場合私は3つの小数点を取得しますが、EntityFrameworkで値を挿入または更新すると小数点以下2桁まで切り捨てられます。 (入力された値は5.123だった)

[Kolhalt] = @14 ... @14 decimal(18,2) ... @14=5.12 

:私はEFが格納されている値のための2つの小数を指定していることがわかりますSQL Serverのプロファイラで

私はSaveChanges()を呼び出すと、何らかの理由でEFがデータベースに送信された値を切り捨てます。

SaveChanges()で正しく取得するには、他の場所の小数点以下の桁数を指定する必要がありますか?

敬具、 ヘンリク

答えて

2

私はプロジェクトに同様の問題がありました。奇妙なことに、私のモデルをdecimal?からdecimalに変更したところ、それは動作し始めました。私はまた設定設定TruncateDecimalsToScaleを追加できます:

public class DbContextConfiguration : DbConfiguration 
{ 
    public DbContextConfiguration() 
    { 
     var providerInstance= SqlProviderServices.Instance; 
     SqlProviderServices.TruncateDecimalsToScale = false; 
     this.SetProviderServices(SqlProviderServices.ProviderInvariantName, SqlProviderServices.Instance); 
    } 
} 
+0

こんにちは、これは私の一日を保存しました。 TruncateDecimalsToScale = falseは問題を解決しました。私は昨日これを試したと思うが、間違いをしているに違いない。私はあなたの答えをupvoteしようとしましたが、私はそれが示すために十分な評判を持っていません。 – Henrik

+0

あなたが使用しているコンテキストにこれをどのように割り当てたかについてもっと詳しく教えてください。 – Andrew

+0

[こちら](https://msdn.microsoft.com/en-us/library/jj680699(v=11113).aspx)を参照してください。私はちょうどコンテキストとして同じフォルダ内のクラスとしてそれを追加しました。 –

関連する問題