Entity Framework 的過去版本

Entity Framework 的第一個版本於 2008 年發行,作為 .NET Framework 3.5 SP1 和 Visual Studio 2008 SP1 的一部分。

從 EF4.1 版本開始,它隨附為 EntityFramework NuGet 套件 - 目前是 NuGet.org 最受歡迎的套件之一。

在 4.1 版和 5.0 版之間,EntityFramework NuGet 套件擴充了隨附於 .NET Framework 的 EF 連結庫。

從第 6 版開始,EF 會成為 開放原始碼 項目,並且從 .NET Framework 完全移出頻外。 這表示當您將 EntityFramework 第 6 版 NuGet 套件新增至應用程式時,您會收到不相依於 .NET Framework 隨附之 EF 位的完整 EF 連結庫複本。 這有助於加快開發與傳遞新功能的步伐。

在 2016 年 6 月,我們發行了 EF Core 1.0。 EF Core 是以新的程式碼基底為基礎,設計為更輕量且可延伸的EF版本。 目前 EF Core 是 Microsoft Entity Framework Team 開發的主要焦點。 這表示 EF6 沒有計劃的新主要功能。 不過,EF6 仍會維護為 開放原始碼 項目和支援的 Microsoft 產品。

以下是過去版本的清單,以反向時間順序列出每個版本中引進的新功能資訊。

Visual Studio 2017 15.7 中的 EF 工具更新

在 2018 年 5 月,我們在 Visual Studio 2017 15.7 中發行了 EF Tools 的更新版本。 其中包含一些常見難題的改善:

  • 修正使用者介面協助工具的數個 Bug
  • 從現有資料庫產生模型時,SQL Server 效能降低的因應措施 #4
  • 支援為 SQL Server 上的大型模型更新模型#185

EF Tools 這個新版本有另一項功能改進,就是在新專案中建立模型時,會安裝 EF 6.2 執行階段。 利用舊版的 Visual Studio,就可以安裝 NuGet 套件的對應版本來使用 EF 6.2 執行階段 (以及 EF 的任何過去版本)。

EF 6.2.0

EF 6.2 執行階段已於 2017 年 10 月發行至 NuGet。 絕大部分歸功於開放原始碼參與者社群的努力,EF 6.2 包含許多 Bug 修正產品增強功能

以下是影響 EF 6.2 執行階段之最重要變更的簡短清單:

  • 從永續性快取載入完成的 Code First 模型來減少啟動時間 #275
  • Fluent API 用來定義索引 #274
  • DbFunctions.Like() 用來讓您撰寫在 SQL 中轉譯為 LIKE 的 LINQ 查詢 #241
  • Migrate.exe 現在支援 -script 選項 #240
  • EF6 現在可以使用 SQL Server 中的序列所產生的索引鍵值 #165
  • SQL Azure 執行策略之暫時性錯誤的更新清單 #83
  • Bug:重試查詢或 SQL 命令失敗,並顯示「SqlParameter 已由另一個 SqlParameterCollection 所包含」 #81
  • Bug:DbQuery.ToString() 評估經常在偵錯工具中逾時 #73

EF 6.1.3

EF 6.1.3 運行時間於 2015 年 10 月發行至 NuGet。 此版本僅包含 6.1.2 版本所報告的高優先順序瑕疵和回歸修正。 修正包括:

  • 查詢:EF 6.1.2 中的回歸:針對 1:1 關聯性和 “let” 子句引進了 OUTER APPLY,且查詢更複雜的查詢
  • 隱藏繼承類別中基類屬性的 TPT 問題
  • 當文字中包含 'go' 一詞時,DbMigration.Sql 會失敗
  • 建立 UnionAll 和 Intersect 扁平化支援的相容性旗標
  • 具有多個 Include 的查詢無法在 6.1.2 中運作(在 6.1.1 中運作)
  • 從 EF 6.1.1 升級至 6.1.2 之後,「SQL 語法中有錯誤」例外狀況

EF 6.1.2

EF 6.1.2 運行時間於 2014 年 12 月發行至 NuGet。 此版本主要與錯誤修正有關。 我們也接受了社群成員的一些值得注意的變化:

  • 您可以從 app/web.configuration 檔案設定查詢快取參數
    <entityFramework>
      <queryCache size='1000' cleaningIntervalInSeconds='-1'/>
    </entityFramework>
    
  • DbMigration 上的 SqlFile 和 SqlResource 方法可讓您執行儲存為檔案或內嵌資源的 SQL 腳本。

EF 6.1.1

EF 6.1.1 運行時間於 2014 年 6 月發行至 NuGet。 此版本包含一些人員遇到的問題修正程式。 其中包括:

  • 設計工具:在 EF6 設計工具中以十進位精確度開啟 EF5 edmx 時發生錯誤
  • LocalDB 的預設實例偵測邏輯不適用於 SQL Server 2014

EF 6.1.0

EF 6.1.0 運行時間於 2014 年 3 月發行至 NuGet。 此次要更新包含大量新功能:

  • 工具匯總 提供一致的方式來建立新的EF模型。 這項功能 擴充了 ADO.NET 實體數據模型精靈,以支援建立Code First模型,包括從現有的資料庫進行反向工程。 這些功能先前在 EF Power Tools 的 Beta 品質中提供。
  • 交易認可失敗 的處理提供 CommitFailureHandler,利用新引進的功能來攔截交易作業。 CommitFailureHandler 允許在認可交易時從聯機失敗自動復原。
  • IndexAttribute 允許將屬性放在 [Index] Code First 模型中的屬性上來指定索引。 程序代碼首先會在資料庫中建立對應的索引。
  • 公用對應 API 提供 EF 對屬性和類型如何對應至資料庫中數據行和數據表的資訊存取權。 在過去版本中,此 API 是內部版本。
  • 能夠透過 App/Web.config 檔案 設定攔截器,可允許新增攔截器,而不需要重新編譯應用程式。
  • System.Data.Entity.Infrastructure.Interception.DatabaseLogger是新的攔截器,可讓您輕鬆地將所有資料庫作業記錄至檔案。 結合先前的功能,這可讓您輕鬆地 開啟已部署應用程式的資料庫作業記錄,而不需要重新編譯。
  • 已改善移轉模型變更偵測 ,讓 Scaffolded 移轉更精確;變更偵測程式的效能也已增強。
  • 效能改善 ,包括初始化期間減少的資料庫作業、LINQ 查詢中 Null 相等比較的優化、在更多案例中產生更快的檢視產生(模型建立),以及更有效率地具體化具有多個關聯之追蹤實體。

EF 6.0.2

EF 6.0.2 運行時間於 2013 年 12 月發行至 NuGet。 此修補程式版本僅限於修正 EF6 版本中引進的問題(EF5 之後效能/行為回歸)。

EF 6.0.1

EF 6.0.1 運行時間於 2013 年 10 月與 EF 6.0.0 同時發行至 NuGet,因為後者內嵌在幾個月前鎖定的 Visual Studio 版本中。 此修補程式版本僅限於修正 EF6 版本中引進的問題(EF5 之後效能/行為回歸)。 最值得注意的變更是在 EF 模型熱身期間修正一些效能問題。 這很重要,因為熱身效能是 EF6 的重點領域,這些問題正在否定 EF6 中取得的一些其他效能提升。

EF 6.0

EF 6.0.0 運行時間於 2013 年 10 月發行至 NuGet。 這是 EntityFramework NuGet 套件中包含 完整 EF 運行時間的第一個版本,該套件 不相依於屬於 .NET Framework 的 EF 位。 將運行時間的其餘部分移至 NuGet 套件需要現有程式代碼的一些重大變更。 如需升級所需的手動步驟的詳細資訊,請參閱升級至 Entity Framework 6 一節

此版本包含許多新功能。 下列功能適用於使用 Code First 或 EF 設計工具建立的模型:

  • 異步查詢和儲存 新增對 .NET 4.5 中引進之工作架構異步模式的支援。
  • 連線 復原能力可自動從暫時性連線失敗復原。
  • 程式代碼型組態 可讓您選擇執行組態 – 傳統上是在組態檔中執行 – 在程式代碼中執行。
  • 相依性解析 引進服務定位器模式的支持,我們已排除一些功能片段,這些功能可以取代為自定義實作。
  • 攔截/SQL 記錄 提供低階建置組塊,以利用建置在上建置的簡單 SQL 記錄來攔截 EF 作業。
  • 測試性改善可讓您在使用模擬架構撰寫自己的測試雙精度浮點數時,更輕鬆地建立 DbContext 和 DbSet 的測試雙精度浮點數。
  • DbContext 現在可以使用已開啟的 Db 連線 ion 來建立,這可讓您在建立內容時開啟連線時會很有説明的案例(例如,在無法保證連線狀態的元件之間共用連線)。
  • 改善的交易支援 可支持架構外部的交易,以及改善在架構內建立交易的方式。
  • .NET 4.0 上的列舉、空間和更好的效能 - 將過去在 .NET Framework 中的核心元件移至 EF NuGet 套件,我們現在能夠在 .NET 4.0 上提供列舉支援、空間數據類型和 EF5 的效能改進。
  • 改善 LINQ 查詢中 Enumerable.Contains 的效能。
  • 改善熱身時間(檢視產生),尤其是大型模型。
  • 插入式複數和單數化服務
  • 現在支援實體類別上 Equals 或 GetHashCode 的自定義實作。
  • DbSet.AddRange/RemoveRange 提供從集合新增或移除多個實體的優化方式。
  • DbChangeTracker.HasChanges 提供簡單且有效率的方式,以查看是否有任何暫止的變更要儲存至資料庫。
  • SqlCeFunctions 提供相當於 SqlFunctions 的 SQL Compact。

下列功能僅適用於 Code First:

  • 自定義程式代碼第一慣例 允許撰寫您自己的慣例,以協助避免重複的設定。 我們提供輕量型慣例的簡單 API,以及一些更複雜的建置組塊,可讓您撰寫更複雜的慣例。
  • 現在支援程式代碼第一次對應至插入/更新/刪除預存程式
  • 等冪移轉腳本 可讓您產生 SQL 腳本,以在任何版本升級至最新版本的資料庫。
  • 可設定的移轉歷程記錄資料表 可讓您自定義移轉歷程記錄數據表的定義。 這特別適用於需要適當數據類型等的資料庫提供者,以便移轉歷程記錄數據表正常運作。
  • 每個資料庫的 多個內容會在使用移轉時或 Code First 自動為您建立資料庫時,移除每個資料庫的先前一個 Code First 模型限制。
  • DbModelBuilder.HasDefaultSchema 是新的 Code First API,可讓 Code First 模型的預設資料庫架構設定在一個地方。 先前 Code First 預設架構是硬式編碼為 「dbo」,而且設定數據表所屬架構的唯一方式是透過 ToTable API。
  • 當您搭配 Code First Fluent API 使用組態類別時,DbModelBuilder.Configurations.AddFromAssembly 方法 可讓您輕鬆地新增元件中定義的所有組態類別。
  • 自定義移轉作業 可讓您新增其他作業,以用於程式代碼型移轉。
  • 默認交易隔離等級會變更為使用 Code First 所建立之資料庫的READ_COMMITTED_SNAPSHOT ,以提供更多延展性和較少的死結。
  • 實體和複雜類型現在可以是巢狀的內嵌類別

EF 5.0

EF 5.0.0 運行時間於 2012 年 8 月發行至 NuGet。 此版本引進了一些新功能,包括列舉支援、數據表值函式、空間數據類型和各種效能改善。

Visual Studio 2012 中的 Entity Framework Designer 也針對每個模型支援多個圖表、在設計介面上著色圖形,以及預存程式的批次匯入。

以下是我們特別針對EF 5版本所整理的內容清單:

EF 4.3.1

EF 4.3.1 運行時間在 EF 4.3.0 之後不久於 2012 年 2 月發行至 NuGet。 此修補程式版本包含 EF 4.3 版本的一些錯誤修正,並針對使用 EF 4.3 搭配 Visual Studio 2012 的客戶引進更好的 LocalDB 支援。

以下是我們特別針對EF 4.3.1 版本所整理的內容清單,大部分針對EF 4.1 提供的內容仍然適用於EF 4.3:

EF 4.3

EF 4.3.0 運行時間於 2012 年 2 月發行至 NuGet。 此版本包含新的 Code First 移轉 功能,可讓您隨著 Code First 模型演進而累加變更 Code First 所建立的資料庫。

以下是我們特別針對 EF 4.3 版本所整理的內容清單,大部分針對 EF 4.1 提供的內容仍然適用於 EF 4.3:

EF 4.2

EF 4.2.0 運行時間於 2011 年 11 月發行至 NuGet。 此版本包含EF 4.1.1版的錯誤修正。 因為此版本只包含 Bug 修正,所以可能是 EF 4.1.2 修補程式版本,但我們選擇移至 4.2,讓我們遠離我們在 4.1.x 版本中使用的日期型修補程式版本號碼,並採用 語意版本設定的語意版本 設定標準。

以下是我們特別針對EF 4.2版本所整理的內容清單,針對EF 4.1 提供的內容也適用於EF 4.2:

EF 4.1.1

EF 4.1.10715 運行時間於 2011 年 7 月發行至 NuGet。 除了 Bug 修正此修補程式版本外,還引進了一些元件,讓設計時間工具更容易使用 Code First 模型。 這些元件會由 Code First 移轉 和 EF Power Tools 使用(包含在 EF 4.3 中)。

您會發現套件的奇怪版本號碼 4.1.10715。 我們過去在決定採用 語意版本控制之前,先使用以日期為基礎的修補程式版本。 將此版本視為 EF 4.1 修補程式 1(或 EF 4.1.1)。

以下是我們針對 4.1.1 版本所彙集的內容清單:

EF 4.1

EF 4.1.10331 運行時間是 2011 年 4 月首次在 NuGet 上發佈。 此版本包含簡化的 DbContext API 和 Code First 工作流程。

您會發現奇怪的版本號碼,4.1.10331,這應該真的是 4.1。 此外,還有 4.1.10311 版本應該為 4.1.0-rc('rc' 代表「候選版」)。 我們過去在決定採用 語意版本控制之前,先使用以日期為基礎的修補程式版本。

以下是我們針對 4.1 版本所整理的內容清單。 其中大部分仍適用於稍後的 Entity Framework 版本:

EF 4.0

此版本包含在 2010 年 4 月的 .NET Framework 4 和 Visual Studio 2010 中。 此版本中的重要新功能包括POCO支援、外鍵對應、延遲載入、可測試性改進、可自定義的程式代碼產生和Model First工作流程。

雖然它是 Entity Framework 的第二個版本,但它的名稱是 EF 4,以符合隨附的 .NET Framework 版本。 在此版本之後,我們開始在 NuGet 上提供 Entity Framework,並採用語意化版本控制,因為我們不再系結至 .NET Framework 版本。

請注意,某些後續版本的 .NET Framework 隨附於內含 EF 位的重大更新。 事實上,EF 5.0 的許多新功能都實作為這些位的改進。 不過,為了合理化 EF 的版本控制案例,我們會繼續將屬於 .NET Framework 的 EF 位稱為 EF 4.0 運行時間,而所有較新版本都包含 EntityFramework NuGet 套件

EF 3.5

Entity Framework 的初始版本包含在 2008 年 8 月發行的 .NET 3.5 Service Pack 1 和 Visual Studio 2008 SP1 中。 此版本提供使用 Database First 工作流程的基本 O/RM 支援。