比较 EF Core & EF6

内容纲要

EF Core

Entity Framework 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 列指出了功能首次出现的产品版本。

创建模型

功能EF6.4EF Core
基本类映射1.0
带有参数的构造函数2.1
属性值转换2.1
没有键的映射类型2.1
约定1.0
自定义约定1.0(部分;https://github.com/dotnet/efcore/issues/214)
数据注释1.0
Fluent API1.0
继承:每个层次结构一张表 (TPH)1.0
继承:每个类型一张表 (TPT)5.0
继承:每个具体类一张表 (TPC)积压工作 (https://github.com/dotnet/efcore/issues/3170)
阴影状态属性1.0
备用键1.0
多对多导航5.0
多对多,无联接实体5.0
密钥生成:数据库1.0
密钥生成:客户端1.0
复杂/已拥有类型2.0
空间数据2.2
模型格式:代码1.0
从数据库创建模型:命令行1.0
从数据库更新模型部分积压工作 (https://github.com/dotnet/efcore/issues/831)
全局查询筛选器2.0
表拆分2.0
实体拆分积压工作 (https://github.com/dotnet/efcore/issues/620)
数据库标量函数映射2.0
数据库表值函数映射5.0
字段映射1.1
可为空引用类型 (C# 8.0)3.0
模型的图形可视化效果未计划支持 (1)
图形模型编辑器未计划支持 (1)
模型格式:EDMX (XML)未计划支持 (1)
从数据库创建模型:VS 向导未计划支持 (1)

正在查询数据

功能EF6.4EF Core
LINQ 查询1.0
可读内容生成的 SQL1.0
GroupBy 转换2.1
加载相关数据:预先加载1.0
加载相关数据:预先加载派生类型2.1
加载相关数据:延迟加载2.1
加载相关数据:显式加载1.1
原始 SQL 查询:实体类型1.0
原生 SQL 查询:无键实体类型2.1
原始 SQL 查询:使用 LINQ 编写1.0
显式编译的查询2.0
await foreach (C# 8.0)3.0
基于文本的查询语言(实体 SQL)未计划支持 (1)

保存数据

功能EF6.4EF Core
更改跟踪:快照1.0
更改追踪:通知1.0
更改跟踪:代理5.0
访问跟踪的状态1.0
开放式并发1.0
事务1.0
批处理语句1.0
存储过程映射积压工作 (https://github.com/dotnet/efcore/issues/245)
断开连接低级别 API 图形1.0
断开连接端到端图形1.0(部分;https://github.com/dotnet/efcore/issues/5536)

其他功能

功能EF6.4EF Core
迁移1.0
数据库创建/删除 API1.0
种子数据2.1
连接复原1.1
拦截器3.0
事件3.0(部分;https://github.com/dotnet/efcore/issues/626)
简单的日志记录 (Database.Log)5.0
DbContext 池2.0

数据库提供程序 (2)

功能EF6.4EF Core
SQL Server1.0
MySQL1.0
PostgreSQL1.0
Oracle1.0
SQLite1.0
SQL Server Compact1.0 (3)
DB21.0
Firebird2.0
Jet (Microsoft Access)2.0 (3)
Azure Cosmos DB3.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 通常也是为了提高性能。 但是,并非所有方案都可提高性能,因此请先进行分析。

给TA打赏
共{{data.count}}人
人已打赏
.NET

.NET云原生挑战赛直播课-第十三课【郝冠军-实现云原生时代的软件可观察性 OpenTelemetry】

2022-6-21 10:23:42

.NET

从 EF6 移植到 EF Core 概述

2022-6-22 10:13:10

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
今日签到
有新私信 私信列表
搜索