EF 检索到不正确的小数精度
Posted
技术标签:
【中文标题】EF 检索到不正确的小数精度【英文标题】:EF retrieves incorrect decimal precision 【发布时间】:2016-01-13 19:21:01 【问题描述】:我使用的是 Entity Framework 6.1,代码优先。我正在尝试从 SQL Server 存储/检索小数,但未检索到正确的精度。我从 .csv 文件中读取数据,处理数据,然后插入数据库。
.csv 文件中的值:1.1390
从导入保存为decimal
时的值:1.1390
插入 DB 的值:1.139
SSMS 中实际存储/显示的值:1.1390
手动运行 SQL Profiler 为检索捕获的查询时的值:1.1390
EF 检索到的值:1.1300
除了检索值之外,一切正常。我已经尝试过其他所有 SO 帖子(如下)中给出的解决方案,但它没有效果。这里出了什么问题?如何以适当的精度检索正确的值?
假设的解决方案:
modelBuilder.Entity<ClassA>().Property(p => p.MyDecimal).HasPrecision(19, 4);
检索方法,返回类型ClassA
,精度不正确:
_poRepository.Table.FirstOrDefault(p => p.CompNumberA == compNum &&
p.LineNumber == lineNumber);
两个十进制值的比较:
import.MyDecimal != dbValue.MyDecimal
ClassA
:
public class ClassA
// properties
public virtual decimal MyDecimal get; set;
【问题讨论】:
您如何查看精度“1.1300”? 你还没有说你正在使用什么 EF 方法,例如Code First,你还没有展示你的模型。如果没有关键信息,似乎任何人都无法提供帮助 @BradleyUffner 我会检查从数据库返回的值与从 .csv 文件中给出的值是否存在差异。比较表明它们是不平等的。当我在断点处查看变量时,Visual Studio 将值显示为1.1300
。
你能显示进行比较的代码吗?
@BradleyUffner Just import.MyDecimal != dbValue.MyDecimal
.
【参考方案1】:
原来我需要以相同的方式指定精度,但在 ClassA
的流畅映射中。在OnModelCreating()
中指定它并没有这样做,但在流畅的映射中指定了它。具体来说:
Property(u => u.MyDecimal).HasPrecision(19, 4);
【讨论】:
【参考方案2】:在 Entity Framework Core 中你可以这样做:
[Column(TypeName = "decimal(19,4)")]
public decimal MyDecimal get; set;
【讨论】:
以上是关于EF 检索到不正确的小数精度的主要内容,如果未能解决你的问题,请参考以下文章
Entity Framework Core - 将小数精度和小数位数设置为所有小数属性[重复]