Entity Framework Tip – Specifying Decimal Precision
By default, Entity Framework takes the .Net decimal
Type and maps it to SQL Server’s decimal(18,2)
data type.
If you’ve got a property on an Entity that is of Type decimal
, but down in your database, you’re allowing for greater precision than 2 decimal places (scale is actually the proper term for the number of places after the decimal), you need to tell Entity Framework this information. Otherwise, decimal values that you save to your database will be truncated at the default 2 decimal places.
Updating decimal scale with Entity Framework
To tell Entity Framework that you need different precision than decimal(18,2)
, you need to open your DbContext implementation.
Then take a look at your OnModelCreating
override.
If you haven’t implemented an override yet, go ahead and create one. If you’ve already got some Code First stuff in your OnModelCreating
override, add to it by following this example:
1protected override void OnModelCreating(DbModelBuilder modelBuilder)
2{
3 modelBuilder.Entity<NameOfEntity>()
4 .Property(p => p.NameOfProperty)
5 .HasPrecision(9, 4); // or whatever your schema specifies
6}
It’s as simple as that! Once you make this update, your decimal values won’t be truncated at the second decimal place anymore. They’ll be as precise as you’ve specified in your call to HasPrecision()
.