2013-07-04 30 views
5

來自asp.net webforms切換到mvc和實體框架代碼第一種方法我現在有一個問題。我如何設置我的環境以部署到生產環境?如何使用實體框架代碼優先部署到生產

我使用Visual Studio 2012並部署了web部署包。在本地我有SQL Express,在生產中我有SQL Server 2008.

我想在我的個人電腦本地開發一個測試,並不時將我的解決方案用web部署包部署到生產環境中。我不想在生產系統中運行遷移,而是想從Visual Studio生成腳本,然後我可以將它添加到生產SQL中。

我想:

  • 創建開發初始遷移。
  • 更新數據庫本地
  • 生成腳本,更新數據庫-script -sourcemigration:InitialCreate
  • 應用此腳本在生產
  • 將應用程序部署到生產

這是正確的做法?我的遷移將在本地運行,那麼當我部署遷移代碼時,它們不會投入生產嗎?

在Global.asax中

Migrator.RunMigrations(); 

其中RunMigrations是一個自定義的遷移類這樣

public class Migrator 
    { 
     public static void RunMigrations() 
     { 
      var migrator = new Configuration(); 
      var dbMigrator = new System.Data.Entity.Migrations.DbMigrator(migrator); 
      if (dbMigrator.GetPendingMigrations().Any()) 
      { 


       dbMigrator.Update(); 

      } 
     } 
    } 

回答

2

你可以用Web Setup Project(用於安裝需要一個MSI自定義操作)的靜態方法:

更新數據庫的實際工作可以通過migrate.exe工具完成。爲了使MSI軟件包運行起來,它確實是一個挑戰。我首先將migrate.exe包含在安裝包中,以便將它與系統的程序集一起部署到bin目錄中。支持在Web設置項目中將exe文件作爲自定義操作運行。遺憾的是我無法讓migrate.exe工作,除非工作目錄被設置爲bin目錄。自定義操作的工作目錄默認爲c:\ windows \ system32。爲了處理這個問題,使用了一個小的vb腳本。

http://coding.abel.nu/2012/04/update-database-msi-custom-action/

UPDATE:

我發現thisthisthis,也許有幫助。