1.翻译:EF基础系列--什么是Entity Framework?
大家好,好久不见,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一起由微软发布的。从那时候开始就一直迭代开发,经历了很多版本。
当前的版本是 EF6和EF Core(注意:这是这篇文章中写的时候,最新的版本,实际上,EF Core 3.0都出来了,而且EF现在是6.2的版本)。下面的图,列出来了EF6和EF Core之间的差异。

EF 6版本的历史

EF Core版本的历史

好了,EF的基础系列,第一篇就介绍完了。有不明白的可以留言,谢谢支持。
附录:
EF 6官方文档: https://docs.microsoft.com/zh-cn/ef/ef6/
EF Core官方文档:https://docs.microsoft.com/zh-cn/ef/core/
1.翻译:EF基础系列--什么是Entity Framework?的更多相关文章
- 4.翻译:EF基础系列--EF架构
原文地址:http://www.entityframeworktutorial.net/EntityFramework-Architecture.aspx 下面的图形,展示了EF的总体架构: 让我们来 ...
- 8.翻译:EF基础系列----EF中实体的状态
原文链接:http://www.entityframeworktutorial.net/basics/entity-states.aspx 在实体的生命周期中,EF API维护着每一个实体的状态,对于 ...
- 7.翻译:EF基础系列---EF中的实体类型
原文地址:http://www.entityframeworktutorial.net/Types-of-Entities.aspx 在Entity Framework中有两种实体类型:一种是POCO ...
- 6.翻译:EF基础系列---什么是EF中的实体?
原文地址:http://www.entityframeworktutorial.net/basics/what-is-entity-in-entityframework.aspx EF中的实体就是继承 ...
- 5.翻译:EF基础系列---EF中的上下文类
原文地址:http://www.entityframeworktutorial.net/basics/context-class-in-entity-framework.aspx EF中的上下文类是一 ...
- 【Basics of Entity Framework】【EF基础系列1】
EF自己包括看视频,看MSDN零零散散的学了一点皮毛,这次打算系统学习一下EF.我将会使用VS2012来学习这个EF基础系列. 现在看看EF的历史吧: EF版本 相关版本特性介绍 EF3.5 基于数据 ...
- 10.翻译:EF基础系列---EF中的持久性
原文链接:http://www.entityframeworktutorial.net/EntityFramework4.3/persistence-in-entity-framework.aspx ...
- 安装Entity Framework【Setup Entity Framework Environment】(EF基础系列篇4)
Entity Framework 5.0 API是分布在两个地方:NuGet和.NET Framework中,这个.NET framework 4.0/4.5包含EF核心的API,然而通过NuGet包 ...
- 3.翻译:EF基础系列--EF怎么工作的?
原文链接:http://www.entityframeworktutorial.net/basics/how-entity-framework-works.aspx 这里,你将会大概了解到EF是怎么工 ...
随机推荐
- ros主从关系
主机: 在~/.bashrc里面输入 export ROS_MASTER_URI=http://localhost:11311export ROS_HOSTNAME=192.168.4.1 其ip地址 ...
- 用windows计划任务执行一些内容的写法,
用windows计划任务执行一些内容的写法, 以下示例: 1.创建ws对象 2.关闭java进程 3.执行bat文件 start.vbe文件内容 set ws=wscript.createobject ...
- 【搜索】Fliptile
#include<stdio.h> #include<stdlib.h> #include<string.h> ; ; typedef long long ll; ...
- Bing Developer Assistant开发随记
Thumb很适合用来做拖动效果的,不会让鼠标轻易跑掉. Combo中的选项是当字符串输入并激发事件后自动加入的,可使用IVsUIShell.SetMRUComboText(GuidList.guidO ...
- 【Web】网页字体图标的使用
字体图标介绍 网页中图片有很多优点,但也有很多缺点,会增加文件的大小以及增加http请求.这时候就需要用的字体图标(iconfont).字体图标的优点,可以跟图片一样改变透明度.旋转等,本质上是文字, ...
- 2016-2017-2 20155312 实验四Android程序设计实验报告
遇到的问题及解决过程 「问题1」Android Studio-R文件出错 解决:参考Android Studio-R文件错误的解决办法步骤如下: 第一步:检查xml文件,R文件错误通常是由于我们的xm ...
- 717. 1-bit and 2-bit Characters
static int wing=[]() { std::ios::sync_with_stdio(false); cin.tie(NULL); ; }(); class Solution { publ ...
- 牛客训练六:海啸(二维树状数组+vector函数的使用)
题目链接:传送门 思路: 二维树状数组, vector(first,last)函数中assign函数相当于将first中的函数清空,然后将last中的值赋值给first. 参考文章:传送门 #incl ...
- (6)How language shapes the way we think
https://www.ted.com/talks/lera_boroditsky_how_language_shapes_the_way_we_think/transcript 00:12So, I ...
- python3 提示 name ‘reload’ is not defined
import importlib importlib.reload(sys)