升級至 Entity Framework 6

在舊版 EF 中,程式碼在隨附于 .NET Framework 和頻外程式庫(主要是 EntityFramework.dll)隨附的核心程式庫(主要是 System.Data.Entity.dll)之間分割。 EF6 會從核心程式庫取得程式碼,並將其併入 OOB 程式庫。 這是為了讓 EF 能夠開放原始碼,並且能夠以與 .NET Framework 不同的步調發展,這是必要的。 因此,應用程式必須針對移動的類型重建。

對於在 EF 4.1 和更新版本中隨附的 DbCoNtext 應用程式而言,這應該很簡單。 使用 ObjectCoNtext 的應用程式需要多一點工作,但仍然不難執行。

以下是將現有應用程式升級至 EF6 所需執行的檢查清單。

1.安裝 EF6 NuGet 套件

您必須升級至新的 Entity Framework 6 執行時間。

  1. 以滑鼠右鍵按一下您的專案,然後選取 [ 管理 NuGet 套件...
  2. 在 [ 線上] 索引標籤下,選取 [EntityFramework] ,然後按一下 [ 安裝]

    注意

    如果已安裝舊版 EntityFramework NuGet 套件,這會將它升級至 EF6。

或者,您可以從 封裝管理員 主控台執行下列命令:

Install-Package EntityFramework

2.確定已移除 System.Data.Entity.dll 的元件參考

安裝 EF6 NuGet 套件應該會自動從您的專案中移除對 System.Data.Entity 的任何參考。

3.交換任何 EF 設計工具 (EDMX) 模型以使用 EF 6.x 程式碼產生

如果您有使用 EF 設計工具建立的任何模型,則必須更新程式碼產生範本,以產生 EF6 相容的程式碼。

注意

Visual Studio 2012 和 2013 目前只有 EF 6.x DbCoNtext 產生器範本可供使用。

  1. 刪除現有的程式碼產生範本。 這些檔案通常會命名 為 edmx_file_name.tt >< edmx_file_name.CoNtext.tt > ,並巢狀在 方案總管 中的 edmx 檔案底下。 < 您可以在 方案總管中選取範本,然後按 Del 鍵加以刪除。

    注意

    在網站專案中,範本不會巢狀于您的 edmx 檔案底下,而是列在方案總管中。

    注意

    在 VB.NET 專案中,您必須啟用 [顯示所有檔案] 才能查看巢狀範本檔案。

  2. 新增適當的 EF 6.x 程式碼產生範本。 在 EF 設計工具中開啟您的模型,以滑鼠右鍵按一下設計介面,然後選取 [ 新增程式碼產生專案...]。

    • 如果您使用 DbCoNtext API(建議使用), EF 6.x DbCoNtext 產生器 將會在 [ 資料 ] 索引標籤下提供。

      注意

      如果您使用 Visual Studio 2012,您必須安裝 EF 6 工具才能擁有此範本。 如需詳細資訊,請參閱 取得 Entity Framework

    • 如果您使用 ObjectCoNtext API,則必須選取 [線上 ] 索引標籤並搜尋 EF 6.x EntityObject 產生器

  3. 如果您將任何自訂套用至程式碼產生範本,則必須將它們重新套用至更新的範本。

4.針對使用的任何核心 EF 類型更新命名空間

DbCoNtext 和 Code First 類型的命名空間尚未變更。 這表示對於使用 EF 4.1 或更新版本的許多應用程式,您不需要變更任何專案。

先前在 System.Data.Entity.dll 中的 ObjectCoNtext 等類型已移至新的命名空間。 這表示您可能需要更新 using Import 指示詞,以針對 EF6 進行建置。

命名空間變更的一般規則是,System.Data.* 中的任何類型都移至 System.Data.Entity.Core.*。 換句話說,只要在 System.Data 後面插入 Entity.Core 。 例如:

  • System.Data.EntityException = > System.Data。 Entity.Core 。EntityException
  • System.Data.Objects.ObjectCoNtext = > System.Data。 Entity.Core 。Objects.ObjectCoNtext
  • System.Data.Objects.DataClasses.RelationshipManager = > System.Data。 Entity.Core 。Objects.DataClasses.RelationshipManager

這些類型位於 Core 命名空間中 ,因為它們不會直接用於大部分 DbCoNtext 型應用程式。 屬於 System.Data.Entity.dll 的一些類型仍經常且直接用於 DbCoNtext 型應用程式,因此尚未移至 Core 命名空間。 這些包括:

  • System.Data.EntityState = > System.Data。 實體 。EntityState
  • System.Data.Objects.DataClasses.EdmFunctionAttribute = > System.Data。 Entity.DbFunctionAttribute

    注意

    此類別已重新命名;具有舊名稱的類別仍然存在且可運作,但現在標示為過時。

  • System.Data.Objects.EntityFunctions = > System.Data。 Entity.DbFunctions

    注意

    此類別已重新命名;具有舊名稱的類別仍然存在並有效,但現在標示為過時。

  • 空間類別(例如 DbGeography、DbGeometry)已從 System.Data.Spatial = > System.Data 移動。 實體 。空間

注意

System.Data 命名空間中的某些類型位於 System.Data.dll 中,這不是 EF 元件。 這些類型尚未移動,因此其命名空間保持不變。