大家好,好久不见,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的特点

  1. 跨平台(Cross-platform):EF Core是跨平台的框架,可以运行在WIndows,Linux和Mac上;
  2. 模型化(Modelling):EF基于POCO(Plain Old CLR Object)实体,创建了一个实体数据模型(EDM--Entity Data Model),这些实体数据具有不同类型的属性。当查询或者保存数据库的时候就会使用到这些实体,和相应的数据打交道。
  3. 查询(Querying):EF允许我们使用LINQ查询语法来从数据库获取数据,数据库提供程序将会把LINQ语句,翻译成SQL语句。EF同样还是允许我们使用原生的SQL。
  4. 更改追踪(Change Tracking):EF会持续追踪,将要提交到数据库的实体的任何改变。(这里指的是实体的属性值得改变)。
  5. 保存(Saving):当你调用EF的SaveChanges方法的时候,EF就会对数据库发起,执行增删查改的指令。EF同样提供了异步保存SaveChangesAsync的方法。
  6. 并发(Concurrency):EF默认使用乐观并发,来确保数据从数据库获取之后,被其他用户更改。
  7. 事务(Transactions):查询或者保存数据的时候,EF提供了自动的事务管理,当然EF可以允许你自定义事务操作。
  8. 缓存(Caching):EF提供了一些开箱即用的缓存。所以当重复查询数据的时候,会直接从缓存获取数据,而不是又去查询一遍数据库。
  9. 内置的约定(Built-in Conventions):EF遵循约定大于配置原则,根据这些原则自动配置EF实体。
  10. 配置(Configurations):EF允许我们使用数据注解特性(Data annotation attribute)来配置EF实体,还可以使用Fluent API,来重写默认的配置。
  11. 迁移(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?的更多相关文章

  1. 4.翻译:EF基础系列--EF架构

    原文地址:http://www.entityframeworktutorial.net/EntityFramework-Architecture.aspx 下面的图形,展示了EF的总体架构: 让我们来 ...

  2. 8.翻译:EF基础系列----EF中实体的状态

    原文链接:http://www.entityframeworktutorial.net/basics/entity-states.aspx 在实体的生命周期中,EF API维护着每一个实体的状态,对于 ...

  3. 7.翻译:EF基础系列---EF中的实体类型

    原文地址:http://www.entityframeworktutorial.net/Types-of-Entities.aspx 在Entity Framework中有两种实体类型:一种是POCO ...

  4. 6.翻译:EF基础系列---什么是EF中的实体?

    原文地址:http://www.entityframeworktutorial.net/basics/what-is-entity-in-entityframework.aspx EF中的实体就是继承 ...

  5. 5.翻译:EF基础系列---EF中的上下文类

    原文地址:http://www.entityframeworktutorial.net/basics/context-class-in-entity-framework.aspx EF中的上下文类是一 ...

  6. 【Basics of Entity Framework】【EF基础系列1】

    EF自己包括看视频,看MSDN零零散散的学了一点皮毛,这次打算系统学习一下EF.我将会使用VS2012来学习这个EF基础系列. 现在看看EF的历史吧: EF版本 相关版本特性介绍 EF3.5 基于数据 ...

  7. 10.翻译:EF基础系列---EF中的持久性

    原文链接:http://www.entityframeworktutorial.net/EntityFramework4.3/persistence-in-entity-framework.aspx ...

  8. 安装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包 ...

  9. 3.翻译:EF基础系列--EF怎么工作的?

    原文链接:http://www.entityframeworktutorial.net/basics/how-entity-framework-works.aspx 这里,你将会大概了解到EF是怎么工 ...

随机推荐

  1. MS SQMServer2008R2 连接不到远程服务的解决办法

    问题: MS SQMServer2008R2 连接不到远程服务的解决办法.程序提示的错误如下: [2017/02/19 17:46:21] 在与 SQL Server 建立连接时出现与网络相关的或特定 ...

  2. openssl初步使用

    centos平台 md5.c #include <stdio.h> #include <string.h> #include <stdlib.h> //#inclu ...

  3. Sharing Code Between Silverlight and WPF

    一个很好的列子: http://www.codeproject.com/Articles/254506/XAMLFinance-A-Cross-platform-WPF-Silverlight-WP7 ...

  4. HDU3695(AC自动机模板题)

    题意:给你n个字符串,再给你一个大的字符串A,问你着n个字符串在正的A和反的A里出现多少个? 其实就是AC自动机模板题啊( ╯□╰ ) 正着query一次再反着query一次就好了 /* gyt Li ...

  5. dfs序理解-hdu3887

    dfs序就是相当于把树转化成了一个区间,在区间上进行操作. void dfs(int u, int fa) { l[u]=++key; ; i=e[i].next) { int v=e[i].v; i ...

  6. 784. Letter Case Permutation

    这个题的思想很重要,两种方法 第一种,回溯法 class Solution { public: int sz; vector<string> letterCasePermutation(s ...

  7. 2018.11.24 poj2774Long Long Message(后缀数组)

    传送门 实际上可以用后缀自动机秒掉 当然后缀数组也挺好写. 我们将两个字符串接在一起,为了方便中间用一个特殊字符连接. 然后对新字符串求heightheightheight数组. 求出来之后对所有满足 ...

  8. 2018.11.01 NOIP训练 递增数列(迭代加深)

    传送门 直接迭代加深搜索. 发现每次最多增加一倍,最少增加一,于是果断上下界剪枝. 代码

  9. 2018.10.30 NOIP模拟 字胡串(单调栈+容斥)

    传送门 对于每个点,用单调栈求出它左右第一个比他大的位置. 然后对每个点O(logai)O(log_{a_i})O(logai​​)求出第一个拥有跟它不同二进制位的位置. 然后容斥一下就行了. 代码

  10. js监听微信、支付宝返回,后退、上一页按钮事件

    $(function(){ pushHistory(); window.addEventListener("popstate", function(e) { alert(" ...