不同的种子用于开发和生产

时间:2016-08-24 19:28:22

标签: entity-framework

根据构建配置(调试/发布),使用Entity Framework(6+)以不同方式为数据库设定种子的建议方法是什么?

现在我正在使用MigrateDatabaseToLatestVersion初始化程序。在开发过程中,我喜欢在我的数据库中有假数据进行测试。所以我在Configuration类的Seed方法中创建了这个测试数据(首先是启用代码)。但是,每次我通过构建服务器发布产品时,我必须在我的种子方法中注释很多代码,提交,创建发布,然后撤消所有注释以继续使用测试数据进行开发。

我想这不是要走的路。所以我希望你能告诉我正确的方法。

1 个答案:

答案 0 :(得分:7)

有很多可能性

  1. 预处理程序指令
  2. 使用#if DEBUG,就像你和Gert Arnold已经谈过的那样:

    protected override void Seed(BookService.Models.BookServiceContext context)
    {
    #if DEBUG
        context.Authors.AddOrUpdate(x => x.Id,
            new Author() { Id = 1, Name = "Test User" },
        );
    #else
        context.Authors.AddOrUpdate(x => x.Id,
            new Author() { Id = 1, Name = "Productive User" },
        );
    #endif
    }
    
    1. 配置
    2. 另一种方法是使用appsettings.json中的配置,也许你想用开发数据设置应用程序,你可以添加像

      这样的东西
      { "environment" : "development" }
      

      并在种子中检查:

      protected override void Seed(BookService.Models.BookServiceContext context)
      {
          var builder = new ConfigurationBuilder();
          builder.AddInMemoryCollection();
          var config = builder.Build();
      
          if (config["environment"].Equals("development"))
          {
              context.Authors.AddOrUpdate(x => x.Id,
                  new Author() { Id = 1, Name = "Test User" },
              );
          }
          else if (config["environment"].Equals("producion"))
          {
              context.Authors.AddOrUpdate(x => x.Id,
                  new Author() { Id = 1, Name = "Productive User" },
              );
          }
      }
      
      1. 环境变量( asp net core 的解决方案)
      2. (另见https://docs.asp.net/en/latest/fundamentals/environments.html

        您可以添加环境变量

        enter image description here 然后通过DI:

        public void Configure(IApplicationBuilder app, IHostingEnvironment env)
        {
            if (env.IsDevelopment())
            {
                SeedDataForDevelopment();
            }
        }