2017-01-30 77 views
2

有些開發/測試/產品環境特定的基礎數據。針對不同環境的實體框架數據遷移

我們現在對所有環境都使用實體框架遷移,但不知道如何指定僅在Dev/Test/Prod上執行遷移的方式來指定特定環境的遷移。

這可以在具有Tag屬性的Fluent Migrator中完成。但是Entity Framework呢?

回答

1

當你說'基礎數據'時,我假設你是指每個環境都有種子。遷移爲此提供了一個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