在sql中插入小数会导致插入零数而不是零附近的小数

时间:2014-11-25 15:10:47

标签: c# sql-server-2012 entity-framework-ctp5

在我的代码中向sql中插入一个0.0001的浮点数,结果在数据库中为0.0000。这是我的表格列的定义:

decimal(20,15) 

以下是类字段的定义:

public decimal Rate {get ; set; }

我该如何解决这个问题?

我正在使用EF Code第一种方法:

Class1 obj = new Class1();
obj.Rate = 0.000001;
ClassDbSet.Add(obj);
DbContext.SaveChange();

2 个答案:

答案 0 :(得分:3)

很久以前我遇到过这个问题。将此方法(如果不存在)添加到DbContext:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
     modelBuilder.Entity<Class1>().Property(rec => rec.Rate).HasPrecision(20, 15);
}

当你在EF中声明一个这样的变量并且没有提到浮点数有多少精度时,所以EF引擎接受默认值(decimale(18,2))

答案 1 :(得分:1)

如果您使用的是EF 4.1或更高版本,则覆盖OnModelCreating方法并为EF中的十进制列指定精度。见(Decimal precision and scale in EF Code First)帖子。

public class EFDbContext : DbContext
{
   protected override void OnModelCreating(System.Data.Entity.DbModelBuilder modelBuilder)
   {
       modelBuilder.Entity<Class1>().Property(object => object.Rate).HasPrecision(20,15);

       base.OnModelCreating(modelBuilder);
   }
}