2
有些開發/測試/產品環境特定的基礎數據。針對不同環境的實體框架數據遷移
我們現在對所有環境都使用實體框架遷移,但不知道如何指定僅在Dev/Test/Prod上執行遷移的方式來指定特定環境的遷移。
這可以在具有Tag屬性的Fluent Migrator中完成。但是Entity Framework呢?
有些開發/測試/產品環境特定的基礎數據。針對不同環境的實體框架數據遷移
我們現在對所有環境都使用實體框架遷移,但不知道如何指定僅在Dev/Test/Prod上執行遷移的方式來指定特定環境的遷移。
這可以在具有Tag屬性的Fluent Migrator中完成。但是Entity Framework呢?
當你說'基礎數據'時,我假設你是指每個環境都有種子。遷移爲此提供了一個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。