2014-07-15 273 views
4

EF6種子我有一個應用程序設置,現在使用EF6代碼首先遷移。我在控制檯中使用標準的添加遷移工作流,然後是更新數據庫。我用的是MigrateDatabaseToLatestVersion初始化本地,以及在我們的開發環境。這爲我和其他開發人員自動處理所有遷移。沒有更新,數據庫

我很不舒服,允許自動遷移發生在生產環境中,所以我運行Update-Database -script來生成一個SQL腳本,我可以在運行之前查看它。這工作得很好,我很滿意這個部署過程。但是,我意識到SEED方法永遠不會運行,因爲Update-Database不直接在數據庫上運行。

我正在尋找一個好辦法讓遷移配置的SEED的方法,但不運行實際遷移運行。我發現migrate.exe(http://msdn.microsoft.com/en-us/data/jj618307.aspx),看起來好像可能沒問題,但我想看看有沒有人知道更好的方法。

而且,可能更重要的是,我是不是荒謬的擔心在生產中自動遷移,考慮多少自動化,我本來已經採用EF6使用?

謝謝!

+0

我在生產中誤會了一次遷移,並且由於遷移中的錯誤以及我們db主機提供商的限制,這意味着所有用戶都擁有root訪問權限,因此我丟失了數據庫。因人而異。 –

+1

我希望[這個答案](http://stackoverflow.com/a/17339310/2115584)將幫助你 – Baximilian

+0

謝謝Baximilian。這看起來像我正在尋找的答案。 – Adam

回答

2

僅供參考 - 對於那些有興趣 - 我結束了創建調用共享的種子邏輯我自己的數據庫初始化。我把所有的種子代碼移動到一個靜態的「種子」類的執行方法。然後我創建了一個簡單的DatabaseInitializer,在我的生產web.config中使用。我仍然使用MigrateToLatestVersion作爲Dev和本地的初始化工具,它的工作原理類似於魅力。

public class SeedOnlyInitializer : IDatabaseInitializer<YourContextType> { 

    public void InitializeDatabase(YourContextType context) 
    { 
     Seed.Execute(context); 
     context.SaveChanges(); 
    } 
} 

感謝Baximilian指出我在正確的方向。答案並不完全符合我的意願,但它幫助我想出了這個問題。

-1

這是我剛剛成功使用的工作流程:

  1. update-database -script(亞當做最初)
  2. 審查,然後運行該SQL腳本(如亞當做最初)
  3. 運行update-database再次(-script標誌故意這次省略)。只要您在上一步中的審查不涉及對SQL腳本的任何編輯,那麼此步驟將不會執行任何其他遷移,並且它也將運行Configuration::Seed()方法。