简体   繁体   English

实体框架种子方法不起作用

[英]Entity Framework Seed method is not working

I am using Code first migration approach and having problem with populating data. 我正在使用代码优先迁移方法,并且在填充数据时遇到问题。 Database/tables are being created on command update-database but data is not being inserted. 在命令update-database上创建数据库/表,但未插入数据。

Here is code 这是代码

internal sealed class Configuration : DbMigrationsConfiguration<webapp_sample.Models.ApplicationDbContext>
    {
        public Configuration()
        {
            AutomaticMigrationsEnabled = false;
            //ContextKey = "webapp_sample.Models.ApplicationDbContext";
        }

        protected override void Seed(webapp_sample.Models.ApplicationDbContext context)
        {

            context.Companies.AddOrUpdate(p => p.Name,
                new Models.Company { CompanyId = 1, Name = "ABC Traders" },
                new Models.Company { CompanyId = 2, Name = "XYZ Traders" }
                );
            context.Divisions.AddOrUpdate(p => p.Name,
                new Models.Division { CompanyId = 1, DivisionId = 1, Name = "IT" },
                new Models.Division { CompanyId = 1, DivisionId = 2, Name = "Purchasing" },
                new Models.Division { CompanyId = 1, DivisionId = 3, Name = "Finance" },
                new Models.Division { CompanyId = 1, DivisionId = 4, Name = "Production" },
                new Models.Division { CompanyId = 1, DivisionId = 5, Name = "Retail" },
                new Models.Division { CompanyId = 2, DivisionId = 6, Name = "HR" },
                new Models.Division { CompanyId = 2, DivisionId = 7, Name = "Cafe" },
                new Models.Division { CompanyId = 2, DivisionId = 8, Name = "Projects" }
                );
            context.SubDivisions.AddOrUpdate(p => p.Name,
                new Models.SubDivision { CompanyId = 1, DivisionId = 1, SubDivisionId = 1, Name = "Application" },
                new Models.SubDivision { CompanyId = 1, DivisionId = 1, SubDivisionId = 2, Name = " Infra" },
                new Models.SubDivision { CompanyId = 1, DivisionId = 1, SubDivisionId = 3, Name = "MIS" },
                new Models.SubDivision { CompanyId = 1, DivisionId = 2, SubDivisionId = 1, Name = "Purchasing" },
                new Models.SubDivision { CompanyId = 1, DivisionId = 3, SubDivisionId = 1, Name = "Finance" },
                new Models.SubDivision { CompanyId = 1, DivisionId = 4, SubDivisionId = 1, Name = "Production" },
                new Models.SubDivision { CompanyId = 1, DivisionId = 5, SubDivisionId = 1, Name = "Retail" },
                new Models.SubDivision { CompanyId = 2, DivisionId = 5, SubDivisionId = 1, Name = "Admin" },
                new Models.SubDivision { CompanyId = 2, DivisionId = 6, SubDivisionId = 1, Name = "Cafe" },
                new Models.SubDivision { CompanyId = 2, DivisionId = 7, SubDivisionId = 1, Name = "Projects" }
                );
        }


    }

and ApplicationDbContext file as below ApplicationDbContext文件如下

public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
    {
        public ApplicationDbContext()
            : base("DefaultConnection", throwIfV1Schema: false)
        {
        }
        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            modelBuilder.Conventions.Remove<OneToManyCascadeDeleteConvention>();



            modelBuilder.Entity<ApplicationUser>().Property(a => a.Latitude).HasPrecision(18, 9);
            modelBuilder.Entity<ApplicationUser>().Property(a => a.Longitude).HasPrecision(18, 9);

            base.OnModelCreating(modelBuilder);

        }
        public static ApplicationDbContext Create()
        {
            return new ApplicationDbContext();
        }


        public DbSet<Company> Companies { get; set; }

        public DbSet<Division> Divisions { get; set; }


        public DbSet<SubDivision> SubDivisions { get; set; }

        public System.Data.Entity.DbSet<webapp_sample.Models.MainMenu> MainMenus { get; set; }
    }

Do you use the EF7? 您是否使用EF7?

You can create a class: 您可以创建一个类:

public class DataInitializer
{
        webapp_sample.Models.ApplicationDbContext _context

        public void InitializeDataAsync(IServiceProvider serviceProvider)
        {
           _context = serviceProvider.GetService<webapp_sample.Models.ApplicationDbContext>();
           // Add the code for inintializing at here
           ...
        }
}

Also you need to use _context.SaveChanges();. 另外,您需要使用_context.SaveChanges();。

In the Startup.cs file, you can do somethings as follow: 在Startup.cs文件中,您可以执行以下操作:

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
            ...
            DataInitializer dataseed = new DataInitializer();
            dataseed.InitializeDataAsync(app.ApplicationServices);
}

Hope this help! 希望有帮助!

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM