强制EF保存指定的小数位

时间:2016-08-02 05:29:56

标签: c# entity-framework sql-server-2008 decimal decimal-point

我在我的实体中定义了一些decimal属性:

public class Entity1
{
   public int Id { get; set; }

   public decimal Value {get; set;}
}

并且因为我想为我的小数保存最大 4位小数,在我定义的配置文件中:

this.Property(t => t.Value).HasPrecision(18, 4); 

所以结果是Value字段,在Entity1表中有4个小数位。

如何强制EF仅保存Value值中使用的小数位?

例如:

  • 如果Value = 0.05则保存0.05,当我从Db读取值时,它显示0.05而不是0.0500
  • 如果值= 0.050则保存0.050
  • 如果值= 0.05000则保存0.0500(因为最大小数位数为4)

换句话说,我希望EF保存最终用户在Value中指定的小数位。

1 个答案:

答案 0 :(得分:0)

由于您关注的是以输入方式显示数字而不是因为数学原因而保留精确的精度,因此您有两种选择。

我假设您实际上需要将值作为数据库中的数字,以用于查询或计算目的。否则,您可以将其保存为字符串。

您可以保存第二个值,表示输入值的精度,并使用该值为您的值创建格式字符串:

public decimal  Value { get; set; }
public byte     ValuePrecision { get; set; }

public string FormatValue()
{
    string fmtString = string.Format("{{0:N{0}}}", this.ValuePrecision);
    return string.Format(fmtString, this.Value);
}

免责声明:代码是从内存中完成的,尚未经过测试。