2012-07-04 59 views
0

我與實體框架4.3遷移久矣發揮創建一個新的數據庫,但我有麻煩達到下一個問題:萬一我的代碼運行在一個現有的數據庫,我希望數據庫自動遷移到最新版本,但如果數據庫不存在,應該從遷移中自動創建數據庫。實體框架4.3.1遷移 - 啓用自動遷移,並在同一時間

我認爲問題與您創建的第一個遷移有關。如果使用-IgnoreChanges參數創建第一個遷移(或者按照此處所述手動刪除它們:http://thedatafarm.com/blog/data-access/using-ef-migrations-with-an-existing-database/),則無法使用遷移來使用DbMigrator類創建新表。因爲你沒有最初的遷移。如果您在不使用-IgnoreChanges的情況下創建第一個遷移,則不可能遷移現有數據庫。有沒有人有解決這個問題的辦法?

回答

0

所以你現有的數據庫,並要對數據庫中你想支持新部署的情況下,由移民創建數據庫,同時使用遷移?

它看起來有點不受支持的用例。在這種情況下最簡單的(未測試)將是由某些AppSettings鍵驅動的條件編譯或條件遷移。這意味着創建初始遷移,如果你沒有數據庫,修改最多的方法:

public override void Up() { 
    if (ConfigurationManager.AppSettings["NewDatabaseRequired"] == "true") { 
     // Here is generated content 
    } 
} 

public override void Up() { 
#if NewDatabaseRequired 
    // Here is generated content 
#endif 
} 

還有很多其他更復雜的選項,包括腳本當前的數據庫,修改如果表已存在,則腳本結束,將腳本作爲資源添加到遷移程序集,然後執行Up方法中使用-IgnoreChanges生成的腳本。

作爲另一個選項可以打開附加的數據庫連接,並檢查遷移表已經存在(通過查詢在SQL Server sys.tables視圖)。這不需要生成腳本。