代码之家  ›  专栏  ›  技术社区  ›  Oleg Sh

EF核心2.2.4和种子数据

  •  0
  • Oleg Sh  · 技术社区  · 4 年前

    我在DataContext上有以下代码:

        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            modelBuilder.ApplyConfiguration<CollectionSite>(new CollectionSiteMap());
            modelBuilder.ApplyConfiguration<TestOrderAlcoholResult>(new TestOrderAlcoholResultMap());
            //.... other configurations
    
            modelBuilder.Entity<ButtonStyle>().HasData(new ButtonStyle()
            {
                Label = "Sharp edges",
                Style = "border-radius: 0",
                IsDefault = true,
                Id = 1
            });
            modelBuilder.Entity<ColorScheme>().HasData(new ColorScheme()
            {
                Primary = "#a21521",
                Secondary = "#fcf7f8",
                Text = "#ced3dc",
                Background = "#4e8097",
                Shade = "#90c2e6",
                IsDefault = true,
                Id = 1
            });
            //.... seed other data
    
            base.OnModelCreating(modelBuilder);
        }
    

    但数据不会在之后添加到表中 update-database . 怎么了?

    0 回复  |  直到 4 年前
        1
  •  0
  •   Farhad Zamani    4 年前

    这个 OnModelCreating 你换衣服的时候打电话来的 模型 或者改变你的生活 数据库上下文 然后使用 Add-Migration update-database .

    OnModelCreating公司 不是每次使用时都运行 更新数据库 .

    根据 Microsoft documentation 这是更好的使用方法 种子数据

    public static void Main(string[] args)
    {
         var host = CreateWebHostBuilder(args).Build();
    
        using (var scope = host.Services.CreateScope())
        {
            var services = scope.ServiceProvider;
            try
            {
                var context = services.GetRequiredService<DbContext>();
                DbInitializer.InitializeData(context);
            }
            catch (Exception ex)
            {
                var logger = services.GetRequiredService<ILogger<Program>>();
                logger.LogError(ex, "An error occurred while seeding the database.");
            }
        }
    
        host.Run();
    }
    
    public static class DbInitializer
    {
        public static void InitializeData(DbContext context)
        {
            context.Database.EnsureCreated();
            context.ButtonStyle.Add(new ButtonStyle()
            {
                Label = "Sharp edges",
                Style = "border-radius: 0",
                IsDefault = true,
                Id = 1
            });
            context.ColorScheme.Add(new ColorScheme()
            {
                Primary = "#a21521",
                Secondary = "#fcf7f8",
                Text = "#ced3dc",
                Background = "#4e8097",
                Shade = "#90c2e6",
                IsDefault = true,
                Id = 1
            });
            context.SaveChanges();
        }
    }
    

    在这种情况下 InitializeData 每次运行程序时都会检查,如果数据库中没有记录,则会在数据库中再次保存新记录。