填充可空小数时,decimal是舍入的,为什么?

时间:2016-02-04 10:32:01

标签: c# entity-framework decimal

decimaldecimal?

之间进行转换时,我有一个非常奇怪的问题就是删除小数的小数部分

我的代码(使用EntityFramework从数据库中提取数据):

var rs = from s in db.SalesDocHeader
         select new SalesTransaction
         {
             SalesDocHeaderId = s.id,
             TotalGrossAmount = s.total_gross ?? 0M
         };

SalesTransaction类的定义:

public class SalesTransaction
{
    public int SalesDocHeaderId { get; set; }
    public decimal TotalGrossAmount { get; set; }       
}

SalesDocHeader类的定义(由Entity Framework生成)。

public partial class SalesDocHeader
 {
    public int id { get; set; }
    public Nullable<decimal> total_gross { get; set; }
 }

每当执行上面的代码时,TotalGrossAmount都会舍入到最大的前一个整数。因此,如果s.total_gross = 32.9,则TotalGrossAmount变为32,64.3变为64,依此类推。

如何防止此问题?

1 个答案:

答案 0 :(得分:0)

默认情况下,EF将所有小数映射到数据库上的decimal(18,0)

您必须将模型配置为保持所需的小数位数。请看这个:Decimal precision and scale in EF Code First

注意:请记住,在C#端有许多事情发生,即在命中数据库之前。因此,如果您的模型没有良好的配置,您将遇到此类问题。您的模型应正确配置以匹配您的数据库。