比較 EF Core 與 EF6

EF Core

Entity Framework Core (EF Core) 是適用於 .NET 的新式物件資料庫對應程式。 其支援 LINQ 查詢、變更追蹤、更新以及結構描述移轉。

EF Core 透過資料庫提供者外掛程式模型搭配使用 SQL Server/Azure SQL Database、SQLite、Azure Cosmos DB、MySQL、PostgreSQL 及更多資料庫。

EF6

Entity Framework 6 (EF6) 則是專為 .NET Framework 設計的物件關聯式對應程式,但支援 .NET Core。 EF6 是穩定且受支援的產品,但已不再積極開發。

功能比較

EF Core 提供的新功能不會在 EF6 中實作。 不過,並非所有 EF6 功能目前都已在 EF Core 中實作。

下表比較 EF Core 和 EF6 中提供的功能。 這是要點概述比較,所以不會一一列出每項功能,也不會說明不同 EF 版本中相同功能的差異。

EF Core 行表示功能首次出現所在的產品版本。

建立模型

功能 EF6.4 EF Core
基本類別對應 Yes 1.0
含參數的建構函式 2.1
屬性值轉換 2.1
不含索引鍵的對應類型 2.1
慣例 Yes 1.0
自訂慣例 Yes 7.0
資料註解 Yes 1.0
Fluent API Yes 1.0
繼承:單表 (TPH) Yes 1.0
繼承:一類一表 (TPT) Yes 5.0
繼承:一具象類別一表 (TPC) Yes 7.0
陰影狀態屬性 1.0
替代金鑰 1.0
多對多導覽 Yes 5.0
多對多但沒有聯結實體 Yes 5.0
金鑰產生:資料庫 Yes 1.0
金鑰產生:用戶端 1.0
複雜/擁有的型別 Yes 2.0
空間資料 Yes 2.2
模型格式:程式碼 Yes 1.0
從資料庫建立模型:命令列 Yes 1.0
從資料庫更新模型 Partial 待處理項目 (#831)
全域查詢篩選條件 2.0
檔案分割 Yes 2.0
實體分割 Yes 7.0
資料庫純量函式對應 2.0
資料庫資料表值函式對應 5.0
欄位對應 1.1
可為 Null 的參考型別 (C# 8.0) 3.0
模型的圖形化視覺效果 Yes 未規劃任何支援 (1)
圖形化模型編輯器 Yes 未規劃任何支援 (1)
模型格式:EDMX (XML) Yes 未規劃任何支援 (1)
從資料庫建立模型:VS 精靈 Yes 未規劃任何支援 (1)

查詢資料

功能 EF6.4 EF Core
LINQ 查詢 Yes 1.0
可讀取產生的 SQL 1.0
GroupBy 轉譯 Yes 2.1
載入相關資料:積極 Yes 1.0
載入相關資料:衍生類型的積極式載入 2.1
載入相關資料:消極 Yes 2.1
載入相關資料:明確 Yes 1.1
原始 SQL 查詢:實體類型 Yes 1.0
原始 SQL 查詢:無索引鍵實體類型 Yes 2.1
原始的 SQL 查詢:使用 LINQ 撰寫 1.0
明確地編譯查詢 2.0
await foreach (C# 8.0) 3.0
以文字為基礎的查詢語言 (Entity SQL) Yes 未規劃任何支援 (1)

儲存資料

功能 EF6.4 EF Core
變更追蹤:快照集 Yes 1.0
變更追蹤:通知 Yes 1.0
變更追蹤:Proxy Yes 5.0
存取追蹤狀態 Yes 1.0
開放式並行存取 Yes 1.0
交易 Yes 1.0
陳述式的批次處理 1.0
預存程序對應 Yes 7.0
已中斷連線的圖形低階 API 1.0
已中斷連線的圖形端對端 1.0 (部分;#5536)

其他功能

功能 EF6.4 EF Core
移轉 Yes 1.0
資料庫建立/刪除 API Yes 1.0
種子資料 Yes 2.1
連線恢復 Yes 1.1
攔截器 Yes 3.0
事件 Yes 3.0 (部分;#626)
簡易記錄 (Database.Log) Yes 5.0
DbContext 共用 2.0

資料庫提供者 (2)

功能 EF6.4 EF Core
SQL Server Yes 1.0
MySQL Yes 1.0
PostgreSQL Yes 1.0
Oracle Yes 1.0
SQLite Yes 1.0
SQL Server Compact Yes 1.0 (3)
DB2 Yes 1.0
Firebird Yes 2.0
Jet (Microsoft Access) 2.0 (3)
Azure Cosmos DB 3.0
記憶體內部 (測試用) 1.0

1 EF Core 不會實作某些 EF6 功能。 這些功能依賴 EF6 的基礎實體資料模型 (EDM) 及/或投資報酬率相對低的複雜功能。 我們一向歡迎您提供意見反應,但 EF Core 雖然做到了許多 EF6 做不到的事,EF Core 卻無法支援 EF6 的所有功能。

2 由協力廠商實作的 EF Core 資料庫提供者,在更新為 EF Core 的新主要版本時可能會延遲。 如需詳細資訊,請參閱資料庫提供者

3 SQL Server Compact 和 Jet 提供者僅適用於 .NET Framework (不適用於 .NET Core)。

支援的平台

EF Core 3.1 透過使用 .NET Standard 2.0,在 .NET Core 和 .NET Framework 上執行。 不過,EF Core 5.0 不會在 .NET Framework 上執行。 如需詳細資料,請參閱 平台

EF6.4 透過多目標在 .NET Core 和 .NET Framework 上執行。

新應用程式的指引

除非應用程式需要只有 .NET Framework 支援的項目,否則請在 .NET Core 上使用 EF Core 處理所有新的應用程式。

現有 EF6 應用程式的指引

EF Core 不能無預警取代 EF6。 從 EF6 移至 EF Core 可能需要變更您的應用程式。

將 EF6 應用程式移至 .NET Core 時:

  • 如果資料存取程式碼穩定,且不太可能演進或需要新的功能,則請繼續使用 EF6。
  • 如果資料存取程式碼不斷演進,或應用程式需要只有 EF Core 提供的新功能,請移轉到 EF Core。
  • 通常也會為了效能而移轉到 EF Core。 不過,並非所有案例都能加快速度,所以請事先做一些分析。

如需詳細資訊,請參閱從 EF6 移植到 EF Core