2016-04-07 78 views
1

在我的ASP.NET EF 6的應用程序,我有以下配置:如何正確推動實體框架代碼優先遷移到生產中?

internal sealed class Configuration : DbMigrationsConfiguration<Gcim.Management.Module.BusinessObjects.ManagementDbContext> 
    { 
     public Configuration() 
     { 
      AutomaticMigrationsEnabled = true; 
     } 

     protected override void Seed(Gcim.Management.Module.BusinessObjects.ManagementDbContext context) 
     { 

     } 
    } 

在我的項目,我啓用了EF代碼優先的遷移。 我能夠從VS Package Manager提示符運行添加遷移以及update-database。 但是,當我的實體發生更改時,添加遷移和更新數據庫僅適用於dev環境。 當我發表我的ASP.NET項目,生產IIS安裝並運行,我仍然得到這個錯誤:

The model backing the 'ManagementDbContext' context has changed since the database was created. Consider using Code First Migrations to update the database (http://go.microsoft.com/fwlink/?LinkId=238269). 

些什麼,我需要,以迫使生產增量DB的變化做,沒有數據丟失?

+0

什麼是你的部署過程?您可以使用'migrate.exe'調用遷移 - 我們通常在持續集成設置(例如TeamCity,Jenkins,TFS)中將其作爲部署的一部分。您如何部署應用程序將告知您如何執行遷移。 – NWard

+0

我只是將發佈的包解壓到C:\ inetroot \ www \ MyAppName文件夾下。 migrate.exe需要哪些文件才能執行遷移?在VS中,C#遷移文件是項目的一部分,但是在項目發佈之後,它們不是應用程序包的一部分。在你的情況下,當你運行migrate.exe時,你提供什麼作爲參數,來解釋什麼需要被遷移? –

+0

您可以在這裏找到有關migrate.exe的文檔:https:// msdn.microsoft.com/en-us/data/jj618307.aspx我們配置了構建步驟以將目標中的最新遷移作爲目標。我們的構建服務器可以通過版本控制訪問完整的源代碼,因此運行時可以使用遷移文件。就你而言,由於你正在手動完成所有工作,因此在解壓縮之前,需要針對生產環境運行遷移。我建議使用像Jenkins(免費!),TFS或TeamCity這樣的構建/部署解決方案,因爲它可以使這個過程更加強大。 – NWard

回答

2

通過使用作爲實體框架nuget包的一部分包含的migrate.exe應用程序,您可以針對給定環境(在本例中爲生產環境)執行給定遷移文件。在發佈您的Web應用程序之前,您需要針對您的生產環境執行最新的遷移 - 一旦完成,新部署的應用程序將正常工作。

您可以通過指定包含遷移類(es)的連接字符串和.dll以及可能的特定遷移來完成此操作。例如:

Migrate.exe Gcim.Management.Module.BusinessObjects.dll /connectionString="Data Source=[YourProductionDatabase];Initial Catalog=[YourTable];Integrated Security=SSPI" /connectionProviderName="System.Data.SqlClient" /targetMigration="[NameofYourMigration]"

migrate.exe文檔可以在這裏找到:https://msdn.microsoft.com/en-us/data/jj618307.aspx

相關問題