不同环境的实体框架数据迁移

时间:2017-01-30 11:13:38

标签: entity-framework entity-framework-6 ef-migrations

有一些特定于Dev / Test / Prod环境的基础数据。

我们现在正在为所有环境使用Entity Framework迁移,但不知道如何为我们指定仅在Dev / Test / Prod上执行迁移的方式指定特定环境的迁移。

这可以在具有Tag属性的Fluent Migrator中完成。但实体框架呢?

1 个答案:

答案 0 :(得分:2)

当你说'基础数据'我假设你的意思是播种每个环境。迁移为此提供seeding mechanism。在Seed()中,您可以像在常规代码中那样区分环境。我们喜欢使用Web.config转换设置:

protected override void Seed(BookService.Models.BookServiceContext context)
{
    if (ConfigurationManager.AppSettings["DeployEnvironment"] == "UAT")
    {
        context.Authors.AddOrUpdate(x => x.Id,
            new Author() { Id = 1, Name = "Test User" },
        );
    }
    else if (ConfigurationManager.AppSettings["DeployEnvironment"] == "PROD")
    {
        context.Authors.AddOrUpdate(x => x.Id,
            new Author() { Id = 1, Name = "Production User" },
        );
    }
}

另一个选项是编译器指令:

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 = "Production User" },
    );
#endif
}

就自己应用迁移而言,我们在开发过程中遵循this process。当我们准备部署到UAT时,我们可以将连接字符串指向UAT并运行迁移,或者我们可以create a script更新数据库。在PROD中,我们this