大家好,好久不见,EF系列之前落下了,还是打算重新整理一下。
先说说目前的打算:先简单了解一下EF基础系列-->然后就是EF 6 Code-First系列-->接着就是EF 6 DB-First系列-->最后就是EF Core系列的学习了。EF Model-First已经过时,被微软抛弃,就不学了。这一次打算好好整理一下,一定不会烂尾,更新的可能慢点,但一定不烂尾,一定不烂尾,一定不烂尾。谢谢大家支持!
好了,废话不多说,直接步入正题。
本系列是翻译系列,原文地址是:什么是Entity Framework?
早在.NET 3.5以前,程序员都是经常写ADO.NET代码或者使用企业内部访问数据的代码块,来从相应的数据库中查询数据或者保存数据到其中。我们经常需要打开数据库的连接,然后创建一个数据集(DataSet),来查询数据,或者提交数据到数据库,然后手动写代码将DataSet的数据转化为.NET 对象中,反之亦然。这样的做法是累赘的,而且容易出错。微软提供了一个框架叫做“Entity Framework”,用来简化上述的操作。
Entity Framework是微软一手打造的开源的ORM框架。它确保开发者可以使用特定的领域类而不是把时间消耗在相关联的数据表和表的数据列上,使用EF,开发者可以在处理数据的时候,只用专注于更高级别的抽象层,写更少的代码就可以完成和传统开发相同的工作。
官方的定义是:“EF是关系对象映射框架,它确保.NET开发者开发者,使用.NET对象来和数据库打交道,而不必去写传统开发模式中的数据库访问的代码”。
下面的图形,列出来了EF在你的项目中的起到的作用。
如上图所示,EF嵌套在业务层和数据库层中间,数据保存的时候是这样,数据值保存在业务层的属性中,然后通过EF转化之后保存到数据库,查询数据的时候,也是类似,数据从数据库抓取之后,通过EF转化之后,就传递给业务层的属性中。
Entity Framework的特点:
跨平台(Cross-platform):EF Core是跨平台的框架,可以运行在WIndows,Linux和Mac上;
模型化(Modelling):EF基于POCO(Plain Old CLR Object)实体,创建了一个实体数据模型(EDM--Entity Data Model),这些实体数据具有不同类型的属性。当查询或者保存数据库的时候就会使用到这些实体,和相应的数据打交道。
查询(Querying):EF允许我们使用LINQ查询语法来从数据库获取数据,数据库提供程序将会把LINQ语句,翻译成SQL语句。EF同样还是允许我们使用原生的SQL。
更改追踪(Change Tracking):EF会持续追踪,将要提交到数据库的实体的任何改变。(这里指的是实体的属性值得改变)。
保存(Saving):当你调用EF的SaveChanges方法的时候,EF就会对数据库发起,执行增删查改的指令。EF同样提供了异步保存SaveChangesAsync的方法。
并发(Concurrency):EF默认使用乐观并发,来确保数据从数据库获取之后,被其他用户更改。
事务(Transactions):查询或者保存数据的时候,EF提供了自动的事务管理,当然EF可以允许你自定义事务操作。
缓存(Caching):EF提供了一些开箱即用的缓存。所以当重复查询数据的时候,会直接从缓存获取数据,而不是又去查询一遍数据库。
内置的约定(Built-in Conventions):EF遵循约定大于配置原则,根据这些原则自动配置EF实体。
配置(Configurations):EF允许我们使用数据注解特性(Data annotation attribute)来配置EF实体,还可以使用Fluent API,来重写默认的配置。
迁移(Migrations):EF 提供了一系列的迁移指令,我们可以通过Nuget Package Manage 控制台来执行这些指令或者使用命令行的方式来执行这些操作。
Entity Framework最新的版本
EF是在2008年的时候,跟随.NET Framework 3.5一起由微软发布的。从那时候开始就一直迭代开发,经历了很多版本。