EntityFramework未检测到对某个精度之后的小数的更改



我遇到了应用程序中最疯狂的行为。我使用的是EF 6,有一个具有十进制属性的模型,数据库类型为十进制(18,4)。如果我将小数的值从0.6500更改为0.6550,并保存对上下文的更改,则该行不会更新。如果我将其从0.6500更改为0.1350并保存更改,该行将得到更新,但该值保存为0.1300,因此丢失了0.005。我知道数据库可以保持这种精度,就像它目前对一些手动插入的数据所做的那样,EF可以毫无问题地检索到这一点。

我到底需要做些什么才能让EF更新我的行/保持精度。非常感谢你的帮助,我可能会哭。

所以我在离开这个问题一段时间后找到了自己问题的答案。看起来EF默认的小数精度是2,我可以自己覆盖它,并根据需要将其设置为4。我从之前回答的问题中窃取了代码:

在EF4.3 中,为代码优先方法中的列设置小数(16,3)

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Entity<MyClass>().Property(x => x.SnachCount).HasPrecision(16, 3);
    modelBuilder.Entity<MyClass>().Property(x => x.MinimumStock).HasPrecision(16, 3);
    modelBuilder.Entity<MyClass>().Property(x => x.MaximumStock).HasPrecision(16, 3);
}

相关内容