在我的代码优先实体框架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()中正确使用?
祝你好运, 亨利克
答案 0 :(得分:4)
我在项目中遇到了类似的问题。奇怪的是,当我将模型从decimal?
更改为decimal
时,它开始工作了。我还找到了可以添加的配置设置TruncateDecimalsToScale :
public class DbContextConfiguration : DbConfiguration
{
public DbContextConfiguration()
{
var providerInstance= SqlProviderServices.Instance;
SqlProviderServices.TruncateDecimalsToScale = false;
this.SetProviderServices(SqlProviderServices.ProviderInvariantName, SqlProviderServices.Instance);
}
}