【问题标题】:Incorrect Decimal precision and scale when creating database with Code First in Entity Framework 6.1在 Entity Framework 6.1 中使用 Code First 创建数据库时,小数精度和小数位数不正确
【发布时间】:2014-09-14 16:35:07
【问题描述】:

我的项目中有一个继承自 IdentityDbContext 的模型,该模型是从使用 Visual Studio 2013 Update 2 创建的 ASP.NET MVC 项目模板创建的。

public partial class MyModel : IdentityDbContext<ApplicationUser>
    {
        public MyModel()
            : base("DefaultConnection")
        {
            Database.SetInitializer(new DropCreateDatabaseIfModelChanges<MyModel>());
        }
        //....other properties

        public virtual DbSet<ProductClientDiscount> ProductClientPrice { get; set; }
        public virtual DbSet<ClientCategoryDiscount> ClientCategoryDiscount { get; set; }
        public virtual DbSet<Product> Products { get; set; }
        //....other properties


        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            base.OnModelCreating(modelBuilder);


           modelBuilder.Entity<ClientCategoryDiscount>().Property(x => x.PercentDiscountRent).HasPrecision(12, 9);
            modelBuilder.Entity<ClientCategoryDiscount>().Property(x => x.PercentDiscountSale).HasPrecision(12, 9);
            modelBuilder.Entity<ProductClientDiscount>().Property(x => x.PercentDiscountRent).HasPrecision(12, 9);
            modelBuilder.Entity<ProductClientDiscount>().Property(x => x.PercentDiscountSale).HasPrecision(12, 9);
            modelBuilder.Entity<Product>().Property(x => x.SalePrice).HasPrecision(12, 9);
            modelBuilder.Entity<Product>().Property(x => x.RentPrice).HasPrecision(12, 9);

        }
    }

我需要在创建数据库的时候更改默认的十进制精度,所以我在其他帖子中发现应该在 OnModelCreating 中完成,就像我做的那样。一切似乎都工作正常,但是,当创建数据库时,十进制字段将获得默认的精度和小数位数(18,2)。我在其他帖子中看到该模型继承自 DBContext,而不是 IdentityDbContext,我不知道是否需要做一些事情才能使其正常工作。我在 Visual Studio 2013 中使用 localdb。感谢任何可以帮助我的人。

【问题讨论】:

    标签: c# asp.net-mvc entity-framework ef-code-first localdb


    【解决方案1】:

    我解决了这个问题。碰巧Visual Studio创建了一个类ApplicationDbContext作为已经从IdentityDbContext继承的项目的一部分,所以MyModel类应该从这个类继承,或者我应该在ApplicationDbContext的OnModelCreating中设置十进制属性 类:

    public partial class MyModel : ApplicationDbContext
        {
            public MyModel()
                : base("DefaultConnection")
            {
                Database.SetInitializer(new DropCreateDatabaseIfModelChanges<MyModel>());
            }
            //....other properties
    
            public virtual DbSet<ProductClientDiscount> ProductClientPrice { get; set; }
            public virtual DbSet<ClientCategoryDiscount> ClientCategoryDiscount { get; set; }
            public virtual DbSet<Product> Products { get; set; }
            //....other properties
    
    
            protected override void OnModelCreating(DbModelBuilder modelBuilder)
            {
                base.OnModelCreating(modelBuilder);
    
    
               modelBuilder.Entity<ClientCategoryDiscount>().Property(x => x.PercentDiscountRent).HasPrecision(12, 9);
                modelBuilder.Entity<ClientCategoryDiscount>().Property(x => x.PercentDiscountSale).HasPrecision(12, 9);
                modelBuilder.Entity<ProductClientDiscount>().Property(x => x.PercentDiscountRent).HasPrecision(12, 9);
                modelBuilder.Entity<ProductClientDiscount>().Property(x => x.PercentDiscountSale).HasPrecision(12, 9);
                modelBuilder.Entity<Product>().Property(x => x.SalePrice).HasPrecision(12, 9);
                modelBuilder.Entity<Product>().Property(x => x.RentPrice).HasPrecision(12, 9);
    
            }
        }
    

    两种方式都很好!

    【讨论】:

      猜你喜欢
      • 2011-03-31
      • 2017-10-04
      • 1970-01-01
      • 2014-02-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多