C# 在sql中插入小数会导致插入零数字而不是接近零的小数

C# 在sql中插入小数会导致插入零数字而不是接近零的小数,c#,sql-server-2012,entity-framework-ctp5,C#,Sql Server 2012,Entity Framework Ctp5,在从我的代码向sql中插入浮点数(如0.0001)的过程中,数据库中的结果是0.0000。以下是我的表格列的定义: decimal(20,15) 以下是类字段的定义: public decimal Rate {get ; set; } 我怎样才能解决这个问题 我使用的EF代码优先方法如下: Class1 obj = new Class1(); obj.Rate = 0.000001; ClassDbSet.Add(obj); DbContext.SaveChange(); 如果您使用的是

在从我的代码向sql中插入浮点数(如0.0001)的过程中,数据库中的结果是0.0000。以下是我的表格列的定义:

decimal(20,15) 
以下是类字段的定义:

public decimal Rate {get ; set; }
我怎样才能解决这个问题

我使用的EF代码优先方法如下:

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

如果您使用的是EF 4.1或更高版本,请重写OnModelCreating方法,并为EF中的十进制列指定精度。见()后文

公共类EFDbContext:DbContext
{
模型创建时受保护的覆盖无效(System.Data.Entity.DbModelBuilder modelBuilder)
{
modelBuilder.Entity().Property(object=>object.Rate).HasPrecision(20,15);
基于模型创建(modelBuilder);
}
}

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

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
     modelBuilder.Entity<Class1>().Property(rec => rec.Rate).HasPrecision(20, 15);
}
模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder)
{
modelBuilder.Entity().Property(rec=>rec.Rate).HasPrecision(20,15);
}

当您在EF中声明这样的变量时,不要提及浮点数的精度,因此EF引擎接受默认值(decimale(18,2))

能否显示实际将值插入数据库的代码。有关您正在使用的数据库服务器的详细信息可能会有所帮助。我更新了我的问题:)还可以显示如何检索/显示此值
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
     modelBuilder.Entity<Class1>().Property(rec => rec.Rate).HasPrecision(20, 15);
}