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; }
}

EF 检索不正确的小数精度

事实证明,我需要以相同的方式指定精度,但在流畅的映射中ClassA.在OnModelCreating()中指定它并没有做到这一点,但在流畅的映射中可以做到这一点。具体说来:

Property(u => u.MyDecimal).HasPrecision(19, 4);

在实体框架核心中,您可以执行以下操作:

[Column(TypeName = "decimal(19,4)")]
public decimal MyDecimal { get; set; }