2016-12-26 82 views
3

我有測試和活動分貝。對於測試數據庫遷移,我在包管理器控制檯中使用Add-Migration ...Update-Database語法。但是對於活的數據庫,我希望在應用程序啓動時以編程方式執行。實體框架核心以編程方式應用遷移

下面的代碼並沒有幫助我:

context.Database.Migrate(); 

我有錯誤Invalid object name 'TempTenants'當我嘗試添加記錄不存在的表。這是我的新桌子。

但我有_EFMigrationsHistory表。而且,我所有的遷徙,甚至是那些沒有實施的遷徙。但我沒有看到新桌子。

如果我手動從測試數據庫中刪除表並嘗試重現錯誤,我會得到相同的結果。

因此,context.Database.Migrate();只創建具有所有遷移的新數據庫,如果它不存在但不更新(應用遷移)現有數據庫。

我可以這樣做嗎?我該如何解決這個問題?

+0

請更清楚「沒有幫助我」。爲什麼?發生了什麼?錯誤信息?你的數據庫最初也是由遷移創建的(是否有'__EFMigrationsHistory'表)? – Tseng

+0

@Tseng我已經更新了我的問題,請看看。 –

+0

開始時沒有例外嗎?日誌讀取的內容是什麼?用戶是否對數據庫服務器有足夠的寫入權限? (ALTER/CREATE語句) – Tseng

回答

1

看來出了點問題。我從__EFMigrationsHistory表中刪除了未應用的遷移(記錄)(還需要將某些表名,主鍵和外鍵恢復到以前的狀態),然後再次啓動應用程序。

因此,context.Database.Migrate();即使對現有數據庫也適用遷移。