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.


Share this post


blog comments powered by Disqus

Updates

Follow me online at TwitterFacebook or Flickr. If you want to get in touch with me try emailing me.

Latest Tweets