什么是 Entity Framework?
在 .NET 3.5 之前,我们(开发者)通过写 ADO.NET 代码或者 Enterprise Data Access Block 组件来保存或者检索来自底层数据库应用程序数据。我们要打开一个数据库连接,创建一个 DataSet 来获取数据库数据或者提交数据到数据库,把来自 DataSet 的数据转换成 .NET 对象,或者反过来应用业务规则。这是一个冗长的而且容易出错的一个过程。微软已经提供了一个框架叫做 “Entity Framework” 用来为我们的程序自动完成这些数据库相关的操作。
Entity Framework 是一个被微软支持的为 .NET 程序服务的开源的 ORM 框架。它使开发者能够用特定域的类对象来工作,而不是把精力集中在底层的数据表和数据存储的列上面。有了 Entity Framework ,开发者在处理数据时能够工作在一个更高的抽象层面上,并且能够用比传统程序更少的代码来创建和维护面向数据的程序。
官方定义:“Entity Framework 是一个对象关系映射器(object-relational mapper (O/RM)),它能够使开发者利用 .NET 对象跟数据库打交道。开发者再也不需要写大量的代码用来访问数据。”
下面的图表展示了 Entity Framework 处于我们你们应用程序的什么位置。
正如上图所示,Entity Framework 处在业务实体(域类)和数据库之间。它用来保存业务实体的属性(properties)中的数据和从数据库中检索数据并且自动转换到业务实体对象中。
Entity Framework 特性:
- 跨平台: EF Core 是一个跨平台的框架,它可以运行在 Windows,Linux和 Mac上。
- 建模: EF (Entity Framework) 创建一个基于 POCO (Plain Old CLR Object) 实体的 EDM (Entity Data Model),POCO实体含有不同数据类型的get/set 属性 (properties)。EF 在查询和保存实体数据到底层数据库的时候会使用 EDM 模型。
- 查询: EF 允许我们使用 LINQ 查询(C#/VB.NET)从底层数据库检索数据。数据库提供器将 LINQ 查询转换成特定数据库的查询语言(例如:关系型数据库的SQL).EF也允许我们执行原生的SQL查询来查询数据库。
- 改变跟踪: 实体实例中 (Property values) 中发生的需要被提交到数据库的任意改变将被 EF 持续跟踪。
- 保存: 当你调用
SaveChanges()
方法时,EF会根据你的实体的改变执行INSERT, UPDATE, 和DELETE命令。EF也提供异步方法SaveChangesAsync()
。 - 并发: 当其他用户从数据库获取数据后要重写数据时,EF默认采用乐观并发(Optimistic Concurrency)。
- 事务: 当查询和保存数据时,EF执行自动事物管理。EF也提供了定制事务管理的选项。
- 缓存: EF包含开箱即用的第一级缓存。所以,重复查询将会返回缓存中的数据,而不是再次访问数据库。
- 内置约定: EF遵循约定高于配置的编程模式,并且包含了一组默认规则用来自动配置EF模型。
- 配置: EF允许我们使用数据注释特性或者 Fluent API 来重写默认的约定。
- 迁移: EF提供了一组迁移命令,可以在 NuGet Package Manager Console 或者 Command Line Interface 中创建和管理底层数据库架构。
Entity Framework 最新版本:
微软在2008年随着 .NET Framework 3.5 引入了 Entity Framework。自那时起,微软发布了 Entity Framework的很多版本。目前,有两个最新的 Entity Framework版本:EF 6 和 EF Core。下面的表格列举了二者之间的重要区别。
EF 6 版本历史:
EF Version | Release Year | .NET Framework |
---|---|---|
EF 6 | 2013 | .NET 4.0 & .NET 4.5, VS 2012 |
EF 5 | 2012 | .NET 4.0, VS 2012 |
EF 4.3 | 2011 | .NET 4.0, VS 2012 |
EF 4.0 | 2010 | .NET 4.0, VS 2010 |
EF 1.0 (or 3.5) | 2008 | .NET 3.5 SP1, VS 2008 |
了解更多关于EF 6的版本历史和它的特性点击这里。
EF Core 版本历史:
EF Core | Version Release Date | .NET Framework |
---|---|---|
EF Core 2.0 | August 2017 | .NET Core 2.0, VS 2017 |
EF Core 1.1 | November 2016 | .NET Core 1.1 |
EF Core 1.0 | June 2016 | .NET Core 1.0 |
在下一章了解使用 EF 工作的基本工作流程。