2016-08-24 56 views
4

根据构建配置(调试/发布),使用实体框架(6+)对种子数据库进行不同种子的建议方法是什么?用于开发和生产的不同种子

现在我正在使用MigrateDatabaseToLatestVersion初始化程序。在开发过程中,我喜欢在数据库中伪造数据以进行测试。所以我在配置类的Seed方法中创建了这个测试数据(随代码优先启用)。但是,每次我通过构建服务器发布产品时,我都必须在我的种子方法中评论很多代码,执行此操作,创建发行版,然后撤消所有注释以继续使用测试数据进行开发。

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

+1

你就不能使用'#如果DEBUG'预处理指令?否则引入你自己的构建配置。 –

+0

我在想那个。但是,我不确定这是否是要走的路。如果有什么我从来没有见过的,我经常开始认为我可能是错的。 – Sam

+1

这就是我要做的,当然! –

回答

5

有很多可能性

  1. 预处理指令

一个是像你和格特·阿诺德已经谈到,使用#if DEBUG

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 
} 
  • 配置
  • 另一种方法是使用配置在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" }, 
         ); 
        } 
    } 
    
  • 环境变量(溶液ASP网络核心
  • (见https://docs.asp.net/en/latest/fundamentals/environments.html

    您可以通过DI加一个环境变量

    enter image description here 后来就:

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

    这很棒! –

    相关问题