2014-04-01 32 views
5

我正在使用的項目是使用實體框架4.3和數據遷移來保持模式最新。在項目過程中,migrations文件夾已經增長,現在有超過600個文件。這是巨大的。由於所有遷移元數據,我們現在有一個超過12MB的二進制文件。什麼是摺疊所有現有實體框架遷移的最佳方式

我想將所有這些合併到一個遷移中並重新開始。我的顧慮是:

  1. 如果我刪除遷移,這是可能的還是會導致遷移歷史記錄的問題?
  2. 有沒有關於如何做到這一點的指導?

回答

5

第一:我建議您將您的遷移保留在單獨的程序集中,以免它們與應用程序一起發佈。它可能是一個簡單的控制檯應用程序,它應用遷移或生成腳本的Winforms GUI。但沒有理由將其與應用程序一起部署。第二:瞭解到您將放棄回退到之前版本的能力,您可以從項目中排除所有先前的遷移,然後生成一個新的應用程序,然後應該能夠創建數據庫反映你目前的模式。這將成爲你的新起點。請記住,EF並不總是生成代碼,以便在遷移過程中執行您所需的任何操作,因此您可能需要在其他遷移中添加一些手寫的遷移代碼。

+0

夢幻般的想法將遷移移動到不同的程序集。你知道EF 4這可能嗎?我認爲遷移必須和DataContext一樣生活在同一個項目中。 –

+1

DbMigrationsConfiguration派生類只需要能夠看到你的DbContext。有兩種方法可以解決這個問題。您可以在Migrations項目中創建單獨的上下文,也可以在Migrations項目中添加對數據層的引用,以便可以在其中查看上下文。我採取的方法是將我的實體和實體映射類保存在各自的項目中。在我的Migrations項目中,我有一個沒有定義任何DbSets的特殊上下文,它只是使用'modelBuilder.Configuration.AddFromAssembly()' –

+0

動態加載所有實體映射類。我喜歡你提出的分離。這是否仍然允許開發人員使用控制檯中的添加遷移和啓用遷移? –

0

不確定過去的版本,但如果您在這裏尋找EF Core的相同解決方案。您應該只需刪除ModelSnapshot並重新運行遷移即可創建乾淨的工作表。

相關問題