在decimal
和decimal?
我的代码(使用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,依此类推。
如何防止此问题?
答案 0 :(得分:0)
默认情况下,EF将所有小数映射到数据库上的decimal(18,0)
。
您必须将模型配置为保持所需的小数位数。请看这个:Decimal precision and scale in EF Code First
注意:请记住,在C#端有许多事情发生,即在命中数据库之前。因此,如果您的模型没有良好的配置,您将遇到此类问题。您的模型应正确配置以匹配您的数据库。