2017-01-19 32 views
0

當我生成遷移時,未能確定數據庫中沒有某個表(Reports),因此生成的遷移爲空。儘管如此,我已經掌握了所有代碼,使這一代人能夠順利運行。使用不存在的表添加遷移問題

此代碼是舊的,直到今天還沒有完成。此外,我找不到任何涉及上述表的遷移,但由於某種原因,它認爲該表已經存在於數據庫中。例如,如果我更改Mapping類中的表名,如下所示,它將使用RenameTable命令生成遷移。當然,更新數據庫命令將失敗。

this.ToTable("Report"); 

關於如何解決這個問題的任何想法?

+0

用IF EXIST編寫SQL腳本,在您的遷移中使用SQL(「,,,」)刪除此表(如果您不關心數據的話),然後您可以再次添加此表 –

+0

@KD既然該表不存在,我想這個腳本不會有任何影響?儘管如此,我試圖在生成的遷移中添加以下行: Sql(「IF EXISTS(SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME ='Reports')DROP Table Reports」); 然後我再次生成遷移,沒有任何影響,如預期的那樣。 我錯過了你說的話嗎? – rsy

+1

EF正在使用__MigrationHistory表跟蹤預期的數據庫狀態。因此,讓我們暫時假設在之前的遷移中存在「報告」,並且由於某種原因,某人手動更改了遷移「上」和「下」代碼,因此它不會創建表。 EF現在仍然認爲該表根據其保存的遷移歷史記錄可用,並且爲了進一步的遷移,它將生成代碼來改變表格而不是創建表格。所提供的信息有點不清楚。 – grek40

回答

2

正如在評論中指出,問題得到了解決,通過使用下面的技巧:

  1. 刪除實體,並註釋掉它正在使用的所有位置。
  2. 創建遷移並從Up和Down方法清除代碼。
  3. 應用遷移。
  4. 重新添加實體。
  5. 創建另一個遷移。它現在應該生成代碼來添加表格。