2015-04-30 48 views
1

我得到了一個數據庫,並且意外地刪除了__MigrationHistory表。 現在程序拋出錯誤,我不能丟失所有的數據。 有沒有辦法恢復我刪除的表? 我會丟失我所有的數據庫嗎?如何恢復數據庫EF遷移工具

我手動添加了__MigrationHistory,現在這個是錯誤:

Additional information: Unable to update database to match the current model because there are pending changes and automatic migration is disabled. Either write the pending model changes to a code-based migration or enable automatic migration. Set DbMigrationsConfiguration.AutomaticMigrationsEnabled to true to enable automatic migration

+0

你能趕上它拋出錯誤,併發布它,以便我們可能知道它是什麼? – Claies

+0

如果您正在嘗試執行新的遷移,或者每次啓動時自動遷移數據庫,則「__MigrationHistory」表應該只是一個問題。無論哪種方式,這個錯誤都會告訴我們需要改變什麼。 – Claies

+0

它試圖重新創建所有的數據庫,它說它不能創建表 –

回答

5

可以「重置」你的遷移的狀態,您的項目。實質上,您將創建一個遷移狀態,其中實體框架認爲數據庫的當前狀態是「第一」遷移。但請注意,這會限制您使用較早的遷移狀態回滾到以前版本的應用程序的能力。

  1. 從項目中的migrations文件夾中刪除現有的遷移。
  2. 刪除數據庫中的__MigrationHistory表(已完成)。
  3. 在軟件包管理器控制檯中運行以下命令:add-migration Reset。由於遷移文件夾不包含任何先前的遷移,因此遷移將成爲當前狀態下模型的完整腳本。 重要驗證此Up方法是否與當前數據庫表狀態完全匹配。
  4. Reset遷移中,註釋掉Up方法中的所有內容。我們不想運行Up方法,因爲數據庫應該已經匹配了這個。
  5. 運行update-database命令。這將創建一個新的__MigrationHistory表,並在表中創建一個新行,表示該數據庫與此遷移步驟相匹配。但是,它不會對數據庫進行任何更改,因爲Up方法爲空。
  6. (可選)Reset遷移刪除圍繞Up方法的評論,以使得新的數據庫可以編寫腳本這一點。
1

將您的腳本指向另一個空的數據庫。運行所有的遷移。將表格和數據從__MigrationHistory複製到生產數據庫中。

2

如果你想保持你的遷移歷史

  1. 如果同時刪除的內容和_MigrationHistory的結構,創建
CREATE TABLE [dbo].[__MigrationHistory] (
    [MigrationId] NVARCHAR (150) NOT NULL, 
    [ContextKey]  NVARCHAR (300) NOT NULL, 
    [Model]   VARBINARY (MAX) NOT NULL, 
    [ProductVersion] NVARCHAR (32) NOT NULL, 
    CONSTRAINT [PK_dbo.__MigrationHistory] PRIMARY KEY CLUSTERED ([MigrationId] ASC, [ContextKey] ASC) 
); 
  1. 評論向上的內容爲空_MigrationHistory ()方法
  2. 運行update-database命令:它將填充__MigrationHistory不嘗試做別的
  3. 取消註釋您在遷移代碼文件註釋,以創建數據庫模型什麼的時候,你會一個新的數據庫上部署