-
EF Core
Entity Framework Core (EF Core) 是適用於 .NET 的新式對象數據庫映射器。 它支持 LINQ 查詢、更改跟蹤、更新和架構遷移。
EF Core 通過數據庫提供程序插件模型與 SQL Server/SQL Azure、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 列指出了功能首次出現的產品版本。
創建模型
表 1 功能 EF6.4 EF Core 基本類映射 是 1.0 帶有參數的構造函數 2.1 屬性值轉換 2.1 沒有鍵的映射類型 2.1 約定 是 1.0 自定義約定 是 1.0(部分;#214) 數據注釋 是 1.0 Fluent API 是 1.0 繼承:每個層次結構一個表 (TPH) 是 1.0 繼承:每個類型一個表 (TPT) 是 計划在 5.0 版中推出 (#2266) 繼承:每個具體類一個表 (TPC) 是 5.0 版的延伸目標 (#3170) (1) 陰影狀態屬性 1.0 備用鍵 1.0 多對多導航 是 計划在 5.0 版中推出 (#19003) 多對多,無聯接實體 是 積壓工作 (#1368) 密鑰生成:數據庫 是 1.0 密鑰生成:客戶端 1.0 復雜/已擁有類型 是 2.0 空間數據 是 2.2 模型格式:代碼 是 1.0 從數據庫更新模型:命令行 是 1.0 從數據庫更新模型 部分 積壓工作 (#831) 全局查詢篩選器 2.0 表拆分 是 2.0 實體拆分 是 5.0 版的延伸目標 (#620) (1) 數據庫標量函數映射 差 2.0 字段映射 1.1 可為空引用類型 (C# 8.0) 3.0 模型的圖形可視化效果 是 未計划支持 (2) 圖形模型編輯器 是 未計划支持 (2) 模型格式:EDMX (XML) 是 未計划支持 (2) 從數據庫更新模型:VS 向導 是 未計划支持 (2) 查詢數據
表 2 功能 EF6.4 EF Core LINQ 查詢 是 1.0 可讀內容生成的 SQL 差 1.0 GroupBy 轉換 是 2.1 加載關聯數據:預先 是 1.0 加載關聯數據:預先加載派生類型 2.1 加載關聯數據:延遲 是 2.1 加載關聯數據:Explicit 是 1.1 原生 SQL 查詢:實體類型 是 1.0 原生 SQL 查詢:無鍵實體類型 是 2.1 原生 SQL 查詢:使用 LINQ 編寫 1.0 顯式編譯的查詢 差 2.0 await foreach (C# 8.0) 3.0 基於文本的查詢語言(實體 SQL) 是 未計划支持 (2) 保存數據
表 3 功能 EF6.4 EF Core 更改跟蹤:快照 是 1.0 更改跟蹤:通知 是 1.0 更改跟蹤:代理 是 已在 5.0 版中合並 (#10949) 訪問跟蹤的狀態 是 1.0 開放式並發 是 1.0 事務 是 1.0 批處理語句 1.0 存儲過程映射 是 積壓工作 (#245) 斷開連接低級別 API 圖形 差 1.0 斷開連接端到端圖形 1.0(部分;#5536) 其他功能
表 4 功能 EF6.4 EF Core 遷移 是 1.0 數據庫創建/刪除 API 是 1.0 種子數據 是 2.1 連接復原 是 1.1 攔截器 是 3.0 事件 是 3.0(部分;#626) 簡單的日志記錄 (Database.Log) 是 已在 5.0 版中合並 (#1199) DbContext 池 2.0 數據庫提供程序(3)
表 5 功能 EF6.4 EF Core SQL Server 是 1.0 MySQL 是 1.0 postgresql 是 1.0 Oracle 是 1.0 SQLite 是 1.0 SQL Server Compact 是 1.0 (4) DB2 是 1.0 Firebird 是 2.0 Jet (Microsoft Access) 2.0 (4) Azure Cosmos DB 3.0 內存中(用於測試) 1.0 1 在給定版本中,不太可能實現延伸目標。 但如果一切順利,我們將嘗試加入相關功能。
2 EF Core 中不會實現某些 EF6 功能。 這些功能依賴於 EF6 的基礎實體數據模型 (EDM),並且/或者是復雜功能,投資回報率相對較低。 歡迎提出反饋,但是,盡管 EF Core 支持許多在 EF6 中無法實現的功能,反過來,EF Core 支持 EF6 的所有功能卻並不可行。
3 更新到新的 EF Core 主版本時,第三方實現的 EF Core 數據庫提供程序可能延遲。 有關詳細信息,請參閱數據庫提供程序。
4 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 的遷移。
- 如果數據訪問代碼穩定且不太可能開發或需要新功能,請繼續使用 EF6。
- 如果數據訪問代碼不斷演變,或應用需要僅在 EF Core 中提供的新功能,請遷移到 EF Core。
- 遷移到 EF Core 通常也是為了提高性能。 但是,並非所有方案都可提高性能,因此請先進行分析。
官方文檔區別:https://docs.microsoft.com/zh-cn/ef/efcore-and-ef6/
EF6官方文檔:https://docs.microsoft.com/zh-cn/ef/ef6/get-started
EFCore官方文檔:https://docs.microsoft.com/zh-cn/ef/core/
