Search code examples
c#.netentity-frameworkef-code-firstdecimal

Decimal precision and scale in EF Code First


I'm experimenting with this code-first approach, but I'm find out now that a property of type System.Decimal gets mapped to a sql column of type decimal(18, 0).

How do I set the precision of the database column?


Solution

  • The answer from Dave Van den Eynde is now out of date. There are 2 important changes, from EF 4.1 onwards the ModelBuilder class is now DbModelBuilder and there is now a DecimalPropertyConfiguration.HasPrecision Method which has a signature of:

    public DecimalPropertyConfiguration HasPrecision(
    byte precision,
    byte scale )
    

    where precision is the total number of digits the db will store, regardless of where the decimal point falls and scale is the number of decimal places it will store.

    Therefore there is no need to iterate through properties as shown but the can just be called from

    public class EFDbContext : DbContext
    {
       protected override void OnModelCreating(System.Data.Entity.DbModelBuilder modelBuilder)
       {
           modelBuilder.Entity<Class>().Property(object => object.property).HasPrecision(12, 10);
    
           base.OnModelCreating(modelBuilder);
       }
    }