EF检索不正确的小数精度

时间:2016-01-13 19:21:01

标签: c# entity-framework

我正在使用Entity Framework 6.1,代码优先。我正在尝试从SQL Server存储/检索小数,但不检索正确的精度。我从.csv文件中读取,处理数据,然后插入数据库。

  • .csv文件中的值:1.1390
  • 导入时保存为decimal的值:1.1390
  • 已插入数据库的值: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; }
}

2 个答案:

答案 0 :(得分:3)

结果我需要以相同的方式指定精度,但是在ClassA的流畅映射中。在OnModelCreating()中指定它没有做到,但在流畅的映射中确实如此。具体做法是:

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

答案 1 :(得分:0)

在Entity Framework Core中,您可以执行以下操作:

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