Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Entity framework EntityFramework在达到一定精度后未检测到小数的更改_Entity Framework - Fatal编程技术网

Entity framework EntityFramework在达到一定精度后未检测到小数的更改

Entity framework EntityFramework在达到一定精度后未检测到小数的更改,entity-framework,Entity Framework,我遇到过应用程序中最疯狂的行为。我使用的是EF 6,有一个带有decimal属性的模型,数据库类型为decimal(18,4)。如果我将小数点的值从0.6500更改为0.6550,并在上下文中保存更改,则该行不会更新。如果我将其从0.6500更改为0.1350并保存更改,该行将被更新,但该值保存为0.1300,因此它丢失了0.005。我知道数据库可以保持这种精度,就像它目前对一些手动插入的数据所做的那样,EF可以毫无疑问地检索到这种精度 我到底需要做什么才能让EF更新我的行/保持精度。非常感谢你

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


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

因此,在离开这个问题一段时间后,我找到了自己问题的答案。似乎小数的默认精度是2,我可以自己重写它,并根据需要将其设置为4。我从先前回答的问题中窃取了代码:

模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder)
{
modelBuilder.Entity().Property(x=>x.SnachCount).HasPrecision(16,3);
modelBuilder.Entity().Property(x=>x.MinimumStock).HasPrecision(16,3);
modelBuilder.Entity().Property(x=>x.MaximumStock).HasPrecision(16,3);
}

您是否查看了您的模型配置,以了解其中设置的精度?你是对的,帕迪,我把这个问题留了几个小时,在发布了这个问题后,我在谷歌上找到了我想要的答案,设置精度确实是解决办法,我猜EF默认值是2。谢谢你两天不让我做不幸的是,如果你想发布这个答案,我会很高兴地接受它,这样问题可以更快地解决:)不需要重复回答。你的答案是正确的,不要认为等待是个大问题。
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);
}