從 EF6 移植到 EF Core - 資料庫作為事實來源
如果您使用資料庫做為事實來源,升級主要涉及解決所產生實體形狀的任何變更。 移轉的步驟包括:
- 挑選時間點來建立資料庫的模型。
- 請確定您的 EF6 專案是最新且與資料庫同步。
- 建立 EF Core 專案。
- 使用 Scaffolding 工具來 將資料庫反向工程為程式碼。
- 驗證 EF Core 產生的類別是否與您的程式碼相容。
- 針對例外狀況,請修改產生的類別並更新 模型組態 ,或將您的程式碼調整為模型。
請注意,雖然 EF Core 目前會建立成功產生資料庫複本所需的所有專案,但資料庫優先方法不需要大部分的程式碼。 此問題的修正會在問題 #10890 中 追蹤。 您可以視需要安全地忽略的專案包括:序列、條件約束名稱、非唯一索引和索引篩選。
處理架構變更
當您的資料庫是事實來源時,EF Core 會從資料庫提取架構資訊,而不是透過移轉推送架構資訊。 一般工作流程是每當資料庫架構變更時,重新執行反向工程步驟。 完整的測試套件對於此方法而言十分有用,因為您可以自動化 Scaffolding 程式,並執行測試來驗證變更。
處理模型差異的提示
基於各種原因,您可能會希望 C# 領域模型與反向工程所產生的模型不同。 在許多情況下,這表示在每次架構變更之後,手動更新自動產生的程式碼。 重新產生程式碼時防止額外投入的其中一種方法,就是針對 DbCoNtext 和相關實體使用部分類別。 然後,您可以在一組不會被覆寫的類別檔案中,保留與商務邏輯和屬性無關的程式碼。
如果您的模型與產生的模型明顯不同,但不會經常變更,其中一個選項是使用 存放庫模式 作為配接器。 存放庫可以使用 EF Core 產生的類別,併發布您使用的自訂類別。 這可藉由將變更隔離至存放庫程式碼來降低變更的影響,而不需要在每次架構變更時執行整個應用程式的重構。
您可以考慮替代工作流程,並遵循類似 混合式方法 的步驟。 您不一次產生一組新的類別,而是指示特定資料表只產生新的類別。 您可以保留現有的類別「現狀」,並直接新增或移除已變更的屬性。 接著,您會更新模型組態,以解決資料庫如何對應至現有類別的任何變更。
自訂程式碼產生
EF Core 6 目前不支援自訂產生的程式碼。 有協力廠商解決方案,例如 可用的 EF Core Power Tools 。 如需精選社群工具和延伸模組的清單,請參閱: EF Core 工具和延伸模組 。
最後,檢閱 EF6 與 EF Core 之間差異的詳細清單,以解決移植的任何剩餘問題。