2017-05-30 100 views
1

在我的代碼優先實體框架sql數據庫我有一個十進制值指定爲18,3。 數據庫對象:實體框架6十進制精度

public decimal? Kolhalt { get; set; } 

在OnModelCreating我有

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

在值被指定爲Kolhalt數據庫(十進制(18,3),空)

如果我輸入值直接在數據庫中我得到三位小數,但是當我用EntityFramework插入或更新一個值時,它被截斷爲2位小數。

與SQL Server探查我可以看到,EF指定2位小數的存儲值:

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

(輸入值是5.123)。

因此,由於某些原因,當我調用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解決了這個問題。我想我昨天確實嘗試了這個,但一定是犯了一些錯誤。我試圖提出你的答案,但我沒有足夠的聲譽來顯示。 – Henrik

+0

你能否提供更多關於你如何將它分配給你使用的上下文的細節? – Andrew

+0

請參閱[這裏](https://msdn.microsoft.com/en-us/library/jj680699(v = vs.113).aspx)。我只是將它作爲上下文的相同文件夾中的一個類添加。 –