Mohammad Joneidi
Mohammad Joneidi

Reputation: 307

Inserting a decimal into sql cause inserting a zero number Instead of a decimal number near zero

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();

Upvotes: 6

Views: 1485

Answers (2)

Ali Foroughi
Ali Foroughi

Reputation: 4599

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))

Upvotes: 4

Piyush Parashar
Piyush Parashar

Reputation: 874

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);
   }
}

Upvotes: 1

Related Questions