從 EF6 移植到 EF Core - 資料庫作為真實來源

如果你用資料庫作為真實來源,升級主要是針對產生的實體形狀的任何變更進行處理。 遷移步驟包括:

  1. 選擇一個時間點來建模資料庫。
  2. 確保您的 EF6 專案是最新且與資料庫同步的。
  3. 創建EF核心專案。
  4. 利用 這些腳手架工具 將資料庫逆向工程為程式碼。
  5. 確認 EF Core 產生的類別是否與你的程式碼相容。
  6. 例外情況下,要麼修改產生的類別並更新 模型設定 ,要麼調整你的程式碼以符合模型。

請注意,雖然 EF Core 目前已架構完成成功產生資料庫副本所需的一切,但資料庫優先的做法並非大量程式碼所必需。 針對此問題的修正,已在 問題 #10890 中追蹤。 你可以放心忽略的部分包括:序列、限制名稱、非唯一索引和索引過濾器。

處理結構變更

當你的資料庫是事實來源時,EF Core 會從資料庫中提取資料結構資訊,而不是透過遷移來推送。 典型的工作流程是在資料庫架構變更時重新執行逆向工程步驟。 完整的測試套件對此方法非常有價值,因為你可以自動化支架流程,並透過執行測試來驗證變更。

處理模型差異的技巧

基於各種原因,你可能希望你的 C# 領域模型與逆向工程產生的模型不同。 在許多情況下,這意味著每次架構變更後,必須手動更新自動產生的程式碼。 為了避免程式碼重新生成時增加額外的工作量,一種方法是來為你的資料庫上下文及相關實體使用局部類別。 這樣你就可以把與商業邏輯和屬性相關的程式碼,放在資料庫中未被追蹤的獨立類別檔案,這些檔案不會被覆寫。

如果你的模型與產生的模型有顯著差異,但不常更換,一個可以考慮的選項是使用 儲存庫圖樣 作為轉接器。 該倉庫可以消耗 EF Core 產生的類別,並發佈你使用的自訂類別。 這可能透過將變更與儲存庫程式碼隔離,減少變更的影響,而不必每次結構變更都進行全應用程式重構。

你或許可以考慮替代工作流程,並採取類似 混合式方法的步驟。 你不是每次都產生一組新的類別,而是指定特定的表格只產生新的類別。 你可以保持現有的類別「原樣」,並直接新增或移除有變動的屬性。 接著你更新模型設定,以處理資料庫映射到現有類別的任何變更。

自訂程式碼產生

EF Core 6 目前不支援對產生程式碼的自訂化。 市面上有第三方解決方案,例如 EF Core Power Tools 。 有關推薦社群工具與擴充功能的清單,請參見: EF 核心工具與擴充功能。

最後,檢視 EF6 與 EF Core 之間的詳細差異清單 ,以解決移植過程中的潛在問題。