实体框架6小数精度

时间:2017-05-30 08:41:54

标签: entity-framework-6

在我的代码优先实体框架sql数据库中,我有一个指定为18,3的十进制值。 数据库对象:

public decimal? Kolhalt { get; set; }

在OnModelCreating中我有

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

在数据库中,该值被指定为Kolhalt(decimal(18,3),null)

如果我直接在数据库中输入一个值,我会得到三位小数,但是当我使用EntityFramework插入或更新一个值时,它会被截断为2位小数。

使用Sql server profiler,我可以看到EF为存储值指定了2位小数:

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

(输入的值为5.123)。

因此,出于某种原因,当我调用SaveChanges()时,EF会截断发送到数据库的值。

我是否必须在其他地方指定小数位才能在SaveChanges()中正确使用?

祝你好运, 亨利克

1 个答案:

答案 0 :(得分:4)

我在项目中遇到了类似的问题。奇怪的是,当我将模型从decimal?更改为decimal时,它开始工作了。我还找到了可以添加的配置设置TruncateDecimalsToScale

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