5

During insert a float number like 0.0001 into sql from my code, the result is a 0.0000 in database. here is definition of my table column:

decimal(20,15) 

Here is the definition of class field:

public decimal Rate {get ; set; }

How can I solve this problem?

I am using EF Code first approach like this:

Class1 obj = new Class1();
obj.Rate = 0.000001;
ClassDbSet.Add(obj);
DbContext.SaveChange();
J. Steen
  • 15,470
  • 15
  • 56
  • 63
Mohammad Joneidi
  • 197
  • 2
  • 12

2 Answers2

3

I have be encounter with this issue long time ago. Add this method (if not exists) into you DbContext :

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

when you declare a variable like this in EF and do not mention any thing about how many precision the float number have , so EF Engine accept the default value (decimale(18,2))

Ali Foroughi
  • 4,540
  • 7
  • 42
  • 66
1

If you are using EF 4.1 or above override the OnModelCreating method and specify Precision for decimal column in EF. See (Decimal precision and scale in EF Code First) post.

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);
   }
}
Community
  • 1
  • 1
Piyush Parashar
  • 866
  • 8
  • 20