Allow Entity Framework store more than 2 decimal places

Entity Framework More Than 2 Decimal Places

If you're using Entity Framework you might have noticed that your decimal values are defaulting to 2 decimal places in your database when it's being built.

Sometimes you'll want to store more than 2 decimal places for things like GPS co-ordinates.

Let's assume that you have an entity class called Location which has the following structure:

using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;

namespace Project.Entities
{
    public class Location
    {
        [Key]
        public int Id { get; set; }

        [Required]
        [MaxLength(100, ErrorMessage = "Must be less than 100 characters long")]
        public string Name{ get; set; }

        [Required]
        [DisplayFormat(DataFormatString = "{0:#,##0.00000#}", ApplyFormatInEditMode = true)]
        public decimal Latitude { get; set; }

        [Required]
        [DisplayFormat(DataFormatString = "{0:#,##0.00000#}", ApplyFormatInEditMode = true)]
        public decimal Longitude { get; set; }
    }
}

To make sure that Entity Framework stores the GPS with more than 2 decimal places add the following to your DataContext file:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            modelBuilder.Entity().Property(q => q.Latitude).HasPrecision(18, 5);
            modelBuilder.Entity().Property(q => q.Longitude).HasPrecision(18, 5);
        }

NOTE: for some reason my code editor is adding a 'project.entities.location' tag to the end of the last code snippet - ignore this. It's just this editor getting a bit confused.

blog comments powered by Disqus

Get In Touch

Follow me online at TwitterFacebook or Flickr.

Latest Tweets