將 EF6 程式代碼型模型移植到 EF Core

如果您已閱讀所有注意事項並準備好遷移,以下是幫助您開始的一些指導方針。

安裝EF Core NuGet 套件

若要使用EF Core,請安裝您想要使用之資料庫提供者的NuGet 套件。 例如,以 SQL Server 為目標時,您會安裝 Microsoft.EntityFrameworkCore.SqlServer。 如需詳細資訊,請參閱 資料庫提供者

如果您打算使用移轉,則也應該安裝 Microsoft.EntityFrameworkCore.Tools 套件。

您可以讓EF6 NuGet 套件 (EntityFramework) 保持安裝,因為 EF Core 和 EF6 可以在相同的應用程式中並存使用。 不過,如果您不想在應用程式的任何區域中使用 EF6,則卸載套件將有助於在需要注意的程式代碼片段上提供編譯錯誤。

交換命名空間

您在 EF6 中使用的大部分 API 都位於 System.Data.Entity 命名空間中(和相關子命名空間)。 第一個程式代碼變更是交換至 Microsoft.EntityFrameworkCore 命名空間。 通常,您會從衍生的上下文程式碼檔案開始,然後在此基礎上持續進行,逐一解決出現的編譯錯誤。

內容組態(連線等)

如設定資料庫連線中所述,EF Core 在偵測要連線的資料庫方面具有較少的魔力。 您需要在衍生內容上覆寫 OnConfiguring 方法,並使用特定於資料庫提供者的 API 來設定資料庫連線。

大部分的 EF6 應用程式會將 連接字串 儲存在應用程式App/Web.config檔案中。 在 EF Core 中,您會使用 ConfigurationManager API 讀取此 連接字串。 您可能需要新增對 System.Configuration 框架組件的參考,才能使用此 API:

public class BloggingContext : DbContext
{
    public DbSet<Blog> Blogs { get; set; }
    public DbSet<Post> Posts { get; set; }

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
      optionsBuilder.UseSqlServer(ConfigurationManager.ConnectionStrings["BloggingDatabase"].ConnectionString);
    }
}

警告 永遠不要將密碼或其他敏感數據儲存在原始程式碼或組態檔中。 生產秘密不應該用於開發或測試。 不應將機密隨應用程式部署。 生產秘密應該透過受控方式存取,例如 Azure 金鑰保存庫。 您可以使用 Azure 金鑰保存庫 組態提供者來儲存及保護 Azure 測試和生產秘密。

更新您的程式碼

此時,處理編譯錯誤並檢閱程序代碼,以查看行為變更是否會影響您。

現有的遷移

現有的 EF6 移轉無法直接移植到 EF Core。

可能的話,最好假設所有先前的 EF6 移轉都已套用至資料庫,然後使用 EF Core 從該點開始移轉架構。 若要這樣做,在模型移植到 EF Core 之後,您會使用 Add-Migration 命令來新增移轉。 接著,您會從腳手架移轉的UpDown方法中移除所有程式代碼。 後續的移轉將會與建立初始移轉時的模型進行比較。

測試埠

只是因為您的應用程式會編譯,並不表示它已成功移植到 EF Core。 您必須測試應用程式的所有區域,以確保沒有任何行為變更對您的應用程式造成負面影響。

最後,檢閱 移植時 要考慮的詳細案例,以取得程序代碼中特定案例和案例的更多建議。