2

我正在致力於通過我們的安裝程序創建和更新數據庫。從安裝程序自定義操作中運行實體框架遷移

該項目是一個MVC網站,因此目前數據庫配置爲在Application_Start命中時創建/更新。

初始化器設置如下:

Database.SetInitializer(new MigrateDatabaseToLatestVersion<MyContext,Migrations.Configuration>()); 

中的配置:

public Configuration() 
{ 
    AutomaticMigrationsEnabled = true; 
    AutomaticMigrationDataLossAllowed = true; 
} 

我會非常喜歡,您只需設置初始化劑和從C#自定義操作直接運行它。我一直在嘗試像下面這樣的東西,但到目前爲止沒有運氣。

[CustomAction] 
    public static ActionResult DBSetup(Session session) 
    { 
     try 
     { 
      Database.SetInitializer(new MigrateDatabaseToLatestVersion<MyContext, Migrations.Configuration>()); 

      using (var db = new MyContext()) 
      { 
       db.Database.Initialize(true); 
      } 

     } 
     catch (Exception err) 
     { 
      session.Log("Error setting up DB: " + err.InnerException); 
      session.Log("", err.Message); 
      return ActionResult.Failure; 
     } 

     return ActionResult.Success; 
    } 

抓住似乎並沒有包含任何信息的異常,所以調試證明很難..

是否有人嘗試這樣做,或嘗試類似的東西和得到的東西的工作只是想知道。

+0

我明白正是你正在嘗試做的(包括MSI/DTF portitions),但我從來沒有嘗試過這一點。勇於創新的領域,首先編寫應用程序,負責執行模式遷移,而不需要在安裝程序中執行SQL腳本。不知道我對此感覺如何,但似乎是未來,我相信我將來會繼續努力。 –

回答

0

我會打包實體框架migrate.exe與您的安裝程序,然後運行遷移命令指向它在Dll的遷移。

Migrate.exe YourApplication.dll /startupConfigurationFile=」..\web.config」

here的命令的完整列表

+0

這看起來很有前途。這是否意味着必須在web.config中設置初始化程序? – Thewads

+0

可能的話,我會在您的Web項目中將數據庫初始值設定項設置爲null,並使用migrate.exe處理所有遷移。我發現從web項目運行它太不可預測了。我相信web.config是需要的,因此它可以獲取到數據庫的連接字符串。 – Neil