比較 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。