EF Core
實體框架核心(EF Core)是一款現代化的 .NET 物件-資料庫映射器。 它支援 LINQ 查詢、變更追蹤、更新及結構遷移。
EF Core 透過 資料庫提供者外掛模型,支援 SQL Server/Azure SQL 資料庫、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 欄位表示此功能首次出現的產品版本。
建立模型
| Feature | EF6.4 | EF Core |
|---|---|---|
| 基本類別映射 | 是的 | 1.0 |
| 帶有參數的建構子 | 2.1 | |
| 房產價值轉換 | 2.1 | |
| 無鍵的映射型別 | 2.1 | |
| 慣例 | 是的 | 1.0 |
| 自訂慣例 | 是的 | 7.0 |
| 資料註釋 | 是的 | 1.0 |
| 流暢式 API | 是的 | 1.0 |
| 繼承:依階層(TPH)表 | 是的 | 1.0 |
| 繼承:按類型分表(TPT) | 是的 | 5.0 |
| 繼承:每個具體類別的表格(TPC) | 是的 | 7.0 |
| 影子狀態特性 | 1.0 | |
| 替代鍵 | 1.0 | |
| 多對多導航 | 是的 | 5.0 |
| 多對多關係不使用聯結實體 | 是的 | 5.0 |
| 金鑰產生:資料庫 | 是的 | 1.0 |
| 金鑰產生:用戶端 | 1.0 | |
| 複合型/擁有型態 | 是的 | 2.0 |
| 空間資料 | 是的 | 2.2 |
| 模型格式:程式碼 | 是的 | 1.0 |
| 從資料庫建立模型:命令列 | 是的 | 1.0 |
| 從資料庫更新模型 | 部分的 | 待辦事項(#831) |
| 全域查詢篩選條件 | 2.0 | |
| 檔案分割 | 是的 | 2.0 |
| 實體分割 | 是的 | 7.0 |
| 資料庫純量函數映射 | 差 | 2.0 |
| 資料庫資料表值函數映射 | 差 | 5.0 |
| 欄位對應 | 1.1 | |
| 可空參考類型(C# 8.0) | 3.0 | |
| 模型的圖形化視覺化 | 是的 | 無支援計畫 (1) |
| 圖形模型編輯器 | 是的 | 無支援計畫 (1) |
| 模型格式:EDMX(XML) | 是的 | 無支援計畫 (1) |
| 從資料庫建立模型:VS 精靈 | 是的 | 無支援計畫 (1) |
查詢資料
| Feature | EF6.4 | EF Core |
|---|---|---|
| LINQ 查詢 | 是的 | 1.0 |
| 可讀產生的 SQL | 差 | 1.0 |
| GroupBy 翻譯 | 是的 | 2.1 |
| 載入相關資料:急切 | 是的 | 1.0 |
| 載入相關資料:衍生型別的即時載入 | 2.1 | |
| 載入相關資料:懶惰 | 是的 | 2.1 |
| 載入相關資料:顯式 | 是的 | 1.1 |
| 原始 SQL 查詢:實體類型 | 是的 | 1.0 |
| 原始 SQL 查詢:無鍵實體類型 | 是的 | 2.1 |
| 原始 SQL 查詢:使用 LINQ 撰寫 | 1.0 | |
| 顯式編譯查詢 | 差 | 2.0 |
| 等待 foreach(C# 8.0) | 3.0 | |
| 以文字為基礎的查詢語言(Entity SQL) | 是的 | 無支援計畫 (1) |
儲存資料
| Feature | EF6.4 | EF Core |
|---|---|---|
| 變更追蹤:快照 | 是的 | 1.0 |
| 變更追蹤:通知 | 是的 | 1.0 |
| 變更追蹤:代理 | 是的 | 5.0 |
| 存取追蹤狀態 | 是的 | 1.0 |
| 樂觀並發控制 | 是的 | 1.0 |
| Transactions | 是的 | 1.0 |
| 語句批次處理 | 1.0 | |
| 預存程序映射 | 是的 | 7.0 |
| 非連接圖層級 API | 差 | 1.0 |
| 不連通圖 端到端 | 1.0(部分; #5536) |
其他功能
| Feature | EF6.4 | EF Core |
|---|---|---|
| 遷移 | 是的 | 1.0 |
| 資料庫建立/刪除 API | 是的 | 1.0 |
| 種子資料 | 是的 | 2.1 |
| 連線復原能力 | 是的 | 1.1 |
| 攔截器 | 是的 | 3.0 |
| 活動 | 是的 | 3.0(部分; #626) |
| 簡單日誌(Database.Log) | 是的 | 5.0 |
| DbContext 共用 | 2.0 |
資料庫提供者 (2)
| Feature | EF6.4 | EF Core |
|---|---|---|
| SQL Server | 是的 | 1.0 |
| MySQL | 是的 | 1.0 |
| PostgreSQL | 是的 | 1.0 |
| Oracle | 是的 | 1.0 |
| SQLite | 是的 | 1.0 |
| SQL Server 精簡版 | 是的 | 1.0 (3) |
| DB2 | 是的 | 1.0 |
| Firebird | 是的 | 2.0 |
| Jet (Microsoft Access) | 2.0 (3) | |
| Azure Cosmos DB | 3.0 | |
| 記憶體內(用於測試) | 1.0 |
1 部分 EF6 功能不會在 EF Core 中實作。 這些功能要麼依賴 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 的功能,否則所有新應用程式都應該使用 EF Core。
現有 EF6 應用指南
EF Core 並非 EF6 的直接替代品。 從 EF6 轉換到 EF Core 很可能需要修改你的應用程式。
將 EF6 應用程式遷移到 .NET Core 時:
- 如果資料存取碼穩定且不太可能演進或需要新功能,就繼續使用 EF6。
- 如果資料存取碼正在演進,或應用程式需要只有 EF Core 才能有的新功能,請移植到 EF Core。
- 移植到 EF Core 也常是為了效能。 不過,並非所有情境都比較快,所以先做一些分析。
更多資訊請參見從 EF6 移植到 EF Core 。