EF 检索不正确的小数精度
本文关键字:小数 精度 不正确 检索 EF | 更新日期: 2023-09-27 18:30:27
我使用的是实体框架 6.1,代码优先。我正在尝试从 SQL Server 存储/检索小数,但未检索到正确的精度。我从.csv文件中读取,处理数据,然后插入数据库。
- .csv文件中的值:
1.1390
- 从导入中另存为
decimal
时的值:1.1390
- 插入数据库的值:
1.139
- SSMS 中实际存储/显示的值:
1.1390
- 手动运行 SQL 事件探查器捕获的查询以进行检索时的值:
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; }
}
事实证明,我需要以相同的方式指定精度,但在流畅的映射中ClassA
.在OnModelCreating()
中指定它并没有做到这一点,但在流畅的映射中可以做到这一点。具体说来:
Property(u => u.MyDecimal).HasPrecision(19, 4);
在实体框架核心中,您可以执行以下操作:
[Column(TypeName = "decimal(19,4)")]
public decimal MyDecimal { get; set; }