Вставка десятичной дроби в sql вызывает вставку нулевого числа вместо десятичного числа около нуля

Во время вставки числа с плавающей точкой, как 0,0001 в SQL из моего кода, результат 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 ответа

Решение

Я уже давно сталкивался с этой проблемой. Добавьте этот метод (если он не существует) в ваш DbContext:

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

когда вы объявляете переменную, подобную этой, в EF и не упоминаете ничего о том, сколько точности имеет число с плавающей запятой, то EF Engine принимает значение по умолчанию (decimale(18,2))

Если вы используете EF 4.1 или выше, переопределите метод OnModelCreating и укажите Точность для десятичного столбца в EF. Смотрите пост ( Десятичная точность и масштаб в 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);
   }
}
Другие вопросы по тегам