有一些特定于Dev / Test / Prod环境的基础数据。
我们现在正在为所有环境使用Entity Framework迁移,但不知道如何为我们指定仅在Dev / Test / Prod上执行迁移的方式指定特定环境的迁移。
这可以在具有Tag属性的Fluent Migrator中完成。但实体框架呢?
答案 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。