过去版本的实体框架

实体框架的第一个版本发布于 2008 年,作为 .NET Framework 3.5 SP1 和 Visual Studio 2008 SP1 的一部分。

从 EF4.1 版本开始,它已经作为 EntityFramework NuGet 包发布 - 目前是 NuGet.org 上最受欢迎的包之一。

在版本 4.1 和 5.0 之间,EntityFramework NuGet 包扩展了作为 .NET Framework 一部分提供的 EF 库。

从版本 6 开始,EF 成为一个开源项目,并且完全脱离了 .NET Framework。 这意味着,将 EntityFramework 版本 6 NuGet 包添加到应用程序时,将获得 EF 库的完整副本,该副本不依赖于作为 .NET Framework 的一部分提供的 EF 位。 这在某种程度上有助于加快新功能的开发和交付速度。

2016 年 6 月,我们发布了 EF Core 1.0。 EF Core 基于新的代码库,并被设计为更轻量且可扩展的 EF 版本。 目前,EF Core 是 Microsoft 实体框架团队的主要开发重点。 这意味着没有为 EF6 计划新的主要功能。 但是,EF6 仍作为开源项目和受支持的 Microsoft 产品进行维护。

以下是按时间倒序排列的过去版本列表,其中包含有关每个版本中引入的新功能的信息。

Visual Studio 2017 15.7 中的 EF 工具更新

2018 年 5 月,我们在 Visual Studio 2017 15.7 中发布了更新后的 EF 工具。 该版本包括对一些常见点的改进:

  • 修复了多个用户界面辅助功能 bug
  • 从现有数据库生成模型时 SQL Server 性能退化的解决方法 #4
  • 支持适用于 SQL Server 上较大模型的更新模型 #185

此新版本的 EF 工具中的另一项改进是,在新项目中创建模型时会安装 EF 6.2 运行时。 借助较旧版本的 Visual Studio,可通过安装相应版本的 NuGet 包来使用 EF 6.2 运行时(以及以前任何版本的 EF)。

EF 6.2.0

EF 6.2 运行时已于 2017 年 10 月发布到 NuGet。 在我们开源社区参与者的努力下,EF 6.2 包括大量的 bug 修复产品增强功能

下表简要列出了影响 EF 6.2 运行时的最重要的更改:

  • 通过加载持久性缓存中已完成的 Code First 模型来加快启动 #275
  • 采用 Fluent API 定义索引 #274
  • 通过 DbFunctions.Like() 编写在 SQL 中转换为 LIKE 的 LINQ 查询 #241
  • Migrate.exe 现支持脚本选项 #240
  • EF6 现在可使用 SQL Server 中的序列生成的键值 #165
  • 更新 SQL Azure 执行策略的暂时性错误列表 #83
  • Bug:重试查询或 SQL 命令失败,“另一 SqlParameterCollection 中已包含 SqlParameter”#81
  • Bug:DbQuery.ToString() 评估在调试程序中经常超时 #73

EF 6.1.3

EF 6.1.3 运行时于 2015 年 10 月发布到 NuGet。 此版本仅包含针对 6.1.2 版本中报告的高优先级缺陷和回归的修复。 修复包括:

  • 查询:EF 6.1.2 中的回归:引入了 OUTER APPLY 以及对 1:1 关系和“let”子句的更复杂查询
  • 在继承类中隐藏基类属性的 TPT 问题
  • 当文本中包含“go”一词时,DbMigration.Sql 失败
  • 为 UnionAll 和 Intersect 平展支持创建兼容性标志
  • 具有多个包含的查询在 6.1.2 中无法正常运行(在 6.1.1 中可正常运行)
  • 从 EF 6.1.1 升级到 6.1.2 后出现“SQL 语法有错误”异常

EF 6.1.2

EF 6.1.2 运行时于 2014 年 12 月发布到 NuGet。 此版本主要关于 bug 修复。 我们还接受了社区成员的一些值得注意的变化:

  • 可以从 app/web.configuration 文件配置查询缓存参数
    <entityFramework>
      <queryCache size='1000' cleaningIntervalInSeconds='-1'/>
    </entityFramework>
    
  • 使用 DbMigration 上的 SqlFile 和 SqlResource 方法可以运行存储为文件或嵌入资源的 SQL 脚本。

EF 6.1.1

EF 6.1.1 运行时于 2014 年 6 月发布到 NuGet。 此版本包含针对许多人遇到的问题的修复。 其中包括:

  • 设计器:在 EF6 设计器中以十进制精度打开 EF5 edmx 时出错
  • LocalDB 的默认实例检测逻辑不适用于 SQL Server 2014

EF 6.1.0

EF 6.1.0 运行时于 2014 年 3 月发布到 NuGet。 此次要更新包含大量新功能:

  • 工具整合功能提供了一种创建新 EF 模型的一致方式。 此功能扩展了 ADO.NET 实体数据模型向导,以支持创建 Code First 模型,包括从现有数据库进行反向工程。 这些功能以前在 EF Power Tools 中以 beta 版本质量提供。
  • 处理事务提交失败功能提供了 CommitFailureHandler,它利用新引入的截获事务操作的能力。 使用 CommitFailureHandler 可以在提交事务时从连接失败中自动恢复。
  • IndexAttribute 功能使用户可以通过在 Code First 模型中的一个(或多个)属性上放置 [Index] 特性来指定索引。 然后,Code First 将在数据库中创建相应的索引。
  • 公共映射 API 提供对有关 EF 如何将属性和类型映射到数据库中的列和表的信息的访问。 在过去的版本中,此 API 是内部 API。
  • 通过 App/Web.config 文件配置拦截器的功能使得可以在不重新编译应用程序的情况下添加拦截器。
  • System.Data.Entity.Infrastructure.Interception.DatabaseLogger 是一种新的拦截器,可以轻松地将所有数据库操作记录到文件中。 将该功能和前一功能结合使用,可以轻松为已部署的应用程序打开数据库操作日志记录,而无需重新编译。
  • 迁移模型更改检测已得到改进,因此基架迁移更加准确;更改检测过程的性能也得到了增强。
  • 性能改进包括减少初始化期间的数据库操作、优化 LINQ 查询中的 NULL 相等比较、在更多方案中更快地生成视图(模型创建),以及更有效地实现具有多个关联的跟踪实体。

EF 6.0.2

EF 6.0.2 运行时于 2013 年 12 月发布到 NuGet。 此补丁版本仅限于修复 EF6 版本中引入的问题(自 EF5 以来性能/行为的回归)。

EF 6.0.1

EF 6.0.1 运行时于 2013 年 10 月与 EF 6.0.0 同时发布到 NuGet,因为后者嵌入了在几个月前锁定的 Visual Studio 版本中。 此补丁版本仅限于修复 EF6 版本中引入的问题(自 EF5 以来性能/行为的回归)。 最显着的变化是修复了 EF 模型预热期间的一些性能问题。 这很重要,因为预热性能是 EF6 的一个重点领域,而这些问题正在抵消 EF6 中其他一些性能提升。

EF 6.0

EF 6.0.0 运行时于 2013 年 10 月发布到 NuGet。 这是第一个在 EntityFramework NuGet 包中包含完整 EF 运行时的版本,该版本不依赖于 .NET Framework 中的 EF 位。 将运行时的其余部分移至 NuGet 包需要对现有代码进行大量中断性变更。 有关升级所需的手动步骤的更多详细信息,请参阅关于升级到实体框架 6 的部分。

此版本包含许多新功能。 以下功能适用于使用 Code First 或 EF 设计器创建的模型:

  • 异步查询和保存添加了对 .NET 4.5 中引入的基于任务的异步模式的支持。
  • 连接复原能力支持从瞬时连接故障中自动恢复。
  • 基于代码的配置使你可以选择在代码中执行配置(传统上是在配置文件中执行)。
  • 依赖项解析引入了对服务定位器模式的支持,我们已经分离出一些可以用自定义实现替换的功能。
  • 拦截/SQL 日志记录提供了用于拦截 EF 操作的低级别构建基块,并在此基础上构建了简单的 SQL 日志记录。
  • 可测试性改进使得在使用模拟框架编写自己的测试替身时,可以更轻松地为 DbContext 和 DbSet 创建测试替身。
  • 现在可以使用已打开的 DbConnection 创建 DbContext,这样,如果在创建上下文(例如在无法保证连接状态的组件之间共享连接)时可以打开该连接,这将非常有帮助。
  • 改进的事务支持提供了对框架外部事务的支持,并改进了在框架内创建事务的方法。
  • .NET 4.0 上的枚举、空间和更好的性能 - 通过将过去位于 .NET Framework 中的核心组件移到 EF NuGet 包中,我们现在能够在 .NET 4.0 上提供枚举支持、空间数据类型和 EF5 的性能改进。
  • 改进了 LINQ 查询中 Enumerable.Contains 的性能
  • 缩短了预热时间(生成视图),尤其是对于大型模型。
  • 可插入式复数化和单数化服务
  • 现在支持实体类上的 Equals 或 GetHashCode 的自定义实现
  • DbSet.AddRange/RemoveRange 提供了一种优化方法来向集中添加或从中删除多个实体。
  • DbChangeTracker.HasChanges 提供了一种简单有效的方法来查看是否有任何挂起的更改要保存到数据库中。
  • SqlCeFunctions 提供了与 SqlFunctions 等效的 SQL Compact。

以下功能仅适用于 Code First:

  • 自定义 Code First 约定使你可以编写自己的约定以帮助避免重复配置。 我们为轻量级约定提供了一个简单的 API 以及一些更复杂的构建基块,使你能够编写更复杂的约定。
  • 现在支持 Code First 映射到插入/更新/删除存储过程
  • 幂等迁移脚本使你能够生成 SQL 脚本,该脚本可以将任何版本的数据库升级到最新版本。
  • 可配置的迁移历史记录表使你能够自定义迁移历史记录表的定义。 这对于需要为迁移历史记录表指定适当数据类型等才能正常运行的数据库提供程序特别有用。
  • 每个数据库多个上下文消除了使用迁移或当 Code First 自动创建数据库时,每个数据库一个 Code First 模型的先前限制。
  • DbModelBuilder.HasDefaultSchema 是一种新的 Code First API,允许在一个位置配置 Code First 模型的默认数据库架构。 以前,Code First 默认架构硬编码为“dbo”,配置表所属架构的唯一方法是通过 ToTable API。
  • DbModelBuilder.Configurations.AddFromAssembly 方法使你能够在将配置类与 Code First Fluent API 一起使用时,轻松地添加程序集中定义的所有配置类。
  • 自定义迁移操作使你能够添加要在基于代码的迁移中使用的其他操作。
  • 对于使用 Code First 创建的数据库,默认事务隔离级别更改为 READ_COMMITTED_SNAPSHOT,从而提高可伸缩性并减少死锁。
  • 实体和复杂类型现在可以嵌套在类中

EF 5.0

EF 5.0.0 运行时于 2012 年 8 月发布到 NuGet。 此版本引入了一些新功能,包括枚举支持、表值函数、空间数据类型和各种性能改进。

Visual Studio 2012 中的实体框架设计器还引入了对每个模型的多图、设计图面上的形状着色和存储过程的批量导入的支持。

以下是专门为 EF 5 版本汇总的内容列表:

EF 4.3.1

EF 4.3.1 运行时于 2012 年 2 月在 EF 4.3.0 发布后不久发布到 NuGet。 此补丁版本包含对 EF 4.3 版本的一些 bug 修复,并为使用 EF 4.3 和 Visual Studio 2012 的客户引入了更好的 LocalDB 支持。

以下是专门为 EF 4.3.1 版本汇总的内容列表,为 EF 4.1 提供的大部分内容仍然适用于 EF 4.3:

EF 4.3

EF 4.3.0 运行时于 2012 年 2 月发布到 NuGet。 此版本包含新的 Code First 迁移功能,该功能可以随着 Code First 模型的发展增量更改由 Code First 创建的数据库。

以下是专门为 EF 4.3 版本汇总的内容列表,为 EF 4.1 提供的大部分内容仍然适用于 EF 4.3:

EF 4.2

EF 4.2.0 运行时于 2011 年 11 月发布到 NuGet。 此版本包含对 EF 4.1.1 版本的 bug 修复。 由于此版本仅包含 bug 修复,因此它可能已是 EF 4.1.2 补丁版本,但我们选择迁移到 4.2,以不再使用在 4.1.x 版本中使用的基于日期的补丁版本号,并为语义化版本控制采用语义化版本控制标准。

以下是专门为 EF 4.2 版本汇总的内容列表,为 EF 4.1 提供的内容仍然适用于 EF 4.2:

EF 4.1.1

EF 4.1.10715 运行时于 2011 年 7 月发布到 NuGet。 除了 bug 修复之外,此补丁版本还引入了一些组件,使设计时工具可以更轻松地处理 Code First 模型。 这些组件由 Code First 迁移(包含在 EF 4.3 中)和 EF Power Tools 使用。

你会注意到包奇怪的版本号 4.1.10715。 在决定采用语义化版本控制之前,我们曾经使用基于日期的补丁版本。 将此版本视为 EF 4.1 补丁 1(或 EF 4.1.1)。

以下是为 4.1.1 版本汇总的内容列表:

EF 4.1

EF 4.1.10331 运行时于 2011 年 4 月首次在 NuGet 上发布。 此版本包含简化的 DbContext API 和 Code First 工作流。

你会注意到奇怪的版本号 4.1.10331,它实际应为 4.1。 此外,还有一个 4.1.10311 版本,它实际应为 4.1.0-rc(“rc”代表“候选发布”)。 在决定采用语义化版本控制之前,我们曾经使用基于日期的补丁版本。

以下是为 4.1 版本汇总的内容列表。 其中大部分仍然适用于实体框架的后续版本:

EF 4.0

此版本于 2010 年 4 月包含在 .NET Framework 4 和 Visual Studio 2010 中。 此版本中的重要新增功能包括 POCO 支持、外键映射、延迟加载、可测试性改进、可自定义代码生成和 Model First 工作流。

尽管它是实体框架的第二个版本,但它被命名为 EF 4,以与其随附的 .NET Framework 版本保持一致。 在此版本之后,我们开始在 NuGet 上提供实体框架,并采用语义化版本控制,因为我们不再与 .NET Framework 版本关联。

请注意,某些后续版本的 .NET Framework 附带了对包含的 EF 位的重大更新。 事实上,EF 5.0 的许多新功能都是作为对这些位的改进而实现的。 但是,为了使 EF 的版本控制合理化,我们继续将属于 .NET Framework 的 EF 位称为 EF 4.0 运行时,而所有更新的版本都包含 EntityFramework NuGet 包

EF 3.5

实体框架的初始版本包含在 2008 年 8 月发布的 .NET 3.5 Service Pack 1 和 Visual Studio 2008 SP1 中。 此版本使用 Database First 工作流提供了基本的 O/RM 支持。