一. 谈情怀

  从第一次接触开发到现在(2018年),接近五年时间了,最初阶段连接数据库,使用的是【SQL语句+ADO.NET】,那时候,什么存储过程、什么事务 统统不理解,生硬的将SQL语句传入SQLHelper类中,后来知道还要注意SQL注入,引入参数化的方式,现在回想一下,那个阶段简直Low到爆。

  (PS:现在很多场景下还是需要使用ADO.NET,所以没有最好,只有最适合)

凡事都是从零开始的,正是这个阶段积累,才有了后续的发展。一次机会,接触到了微软的EF(ps:如果没有记错的话,当时用的是EF 5.0 的DBFirst模式),彻底颠覆了我的开发观念,不需要写SQL语句(那时还不清楚EF也可以调用SQL语句),Lambda表达式(并不知道Lambda还分Lambda表达式和Lambda语句),兴奋了一阵,然后进入了漫长的EF摸索和填坑阶段了(EF5.0→EF6.2→EF Core)。

    如果你觉得EF不灵活,不能调用存储过程或自定义事务?如果你觉得EF在处理海量数据库的时候会很慢?如果你觉得EF满足不了你的开发需求?。。。。。。 那么也许该系列的文章会对你有些帮助。

二. ORM框架

  说起DotNet领域的ORM框架,我们想到的有EF、NHibernate、FluentData、Dapper、SQLSugar等等。那么到底什么是ORM呢?

    ORM(Object Relational Mapping),中文名字:对象关系映射,它是面向对象思想的进一步的发扬光大,主要实现【程序对象】到【关系型数据库】的映射。在之前使用ADO.NET开发的时候,数据库访问层(即 DAL),要写很多增加、删除、保存的方法,很是麻烦,如果引入ORM框架,它自带CRUD的API(相当于DAL层已经给你写好了),可以自动生成SQL语句,所以作为开发者而言,只需要关注对象即可。

   ORM的含义:

  ① O:Domain Object  领域模型

  ② R:Relational DataBase 关系型数据库

  ③ M : Mapping 映射关系

ORM的三大核心原则:

  ① 简单性:以最简单的模式建模数据。

  ② 传达性:数据库结构被任何人都能理解的语言文档化。

③ 精确性:基于数据模型创建正确标准化的结构。

  EF的核心架构:

  ①  EDM(Entity Data Model):这是微软提供的一个强大的可视化工具,用来生成 O、R、M的

  ②  两种语法的查询:LINQ to Entities 和 Entity SQL

  ③ ObjectServices:Linq to Entities 和Entity Client Data Provider 之间起到转换作用

  ④ Entity Client Data Provider: 将Lambda转换成SQL语句

  ⑤ ADO.Net Data Provider: 标准的ADO.Net

  ⑥ DataBase:数据库

三. 从EF的入手,深入理解ORM框架

  EF(Entity FrameWork),是微软推出基于ADO.NET的数据库访问技术,它是一套ORM框架, 框架中包括了实例模型、数据模型、关系映射三部分,EF的上下文为DbContext,EF在 【.Net FrameWork】版本中最新的是 6.2.0 版本,最稳定的是6.2版本,在【.Net Core】中推出 EF Core (即所谓的“EF7”,^_^,当然已经不这么叫了)。

  EF包括三种模式:DBFirst、CodeFist、ModelFirst 。EF可以调用SQL语句、可以使用Linq查询、可以使用Lambda查询,EF还有很多高级属性,比如延迟加载、缓存属性等等,在该系列文章中都将逐一详细介绍。

  EF也有优缺点:

   优点:①  EF是微软自家的产品,和VS的集成度很高,极大的提高了开发效率。

        ②  EF中ModelFirst模式提供的模型设计器功能很强大,且采用T4模板生成的代码的功能很强大。

③  支持多数据库开发,简单的改变配置文件,就可以切换数据库。

缺点: 在复杂的查询生成SQL脚本的效率不是很高,浪费了性能。

     举例:之前在开发中,一张幼儿表里大约有60个字段左右,一个业务需要根据复杂的条件查询出来一些信息(大约5个字段左右),当时由于按开发人员的失误,写的Lambda表达式直接将所有字段查询出来,导致该业务耗时很长大约25s左右,后来在我的引导下,先去数据库中直接写SQL语句,查询所有字段,发现速度很快;然后将EF

中的Lambda查询改为只查询指定的5个字段,发现速度有25s→3s左右,提升非常明显,当然这也很好的说明了EF的局限是在生成SQL的脚本效率上。

四. 系列章节

   第一节: 结合EF的本地缓存属性来介绍【EF增删改操作的几种形式

         第二节: 比较EF的Lambda查询和Linq查询写法的区别

         第三节: EF调用普通SQL语句的两类封装(ExecuteSqlCommand和SqlQuery )

         第四节: EF调用存储过程的通用写法和DBFirst模式子类调用的特有写法

         第五节: EF高级属性(一) 之 本地缓存、立即加载、延迟加载(不含导航属性)

         第六节: EF高级属性(二) 之延迟加载、立即加载、显示加载(含导航属性)

         第七节: EF的三种事务的应用场景和各自注意的问题(SaveChanges、DBContextTransaction、TransactionScope)。

         第八节: EF的性能篇(一) 之 EF自有方法的性能测试   :

         第九节: EF的性能篇(二) 之 Z.EntityFramework.Extensions程序集解决EF的性能问题(补充免费开源的Z.EntityFramework-Plus待完成)   :

         第十节: EF的三种追踪实体属性变化方式(DBEntityEntry、ChangeTracker、Local)     :

         第十一节: EF的三种模式(一) 之 DBFirst模式(SQLServer和MySQL两套方案):

         第十二节: EF的三种模式(二) 之 ModelFirst模式(SQLServer为例):

         第十三节: EF的三种模式(三) 之 来自数据库的CodeFirst模式    :

         第十四节: EF的三种模式(四) 之 原生正宗的 CodeFirst模式的默认约定   :

         第十五节: EF的CodeFirst模式通过DataAnnotations修改默认协定   :

         第十六节: EF的CodeFirst模式通过Fluent API修改默认协定   :

         第十七节: EF的CodeFirst模式的四种初始化策略和通过Migration进行数据的迁移  :

         第十八节: EF的CodeFirst模式连接MySQL数据库的解决方案(未完成)  :

         第十九节: 结合【表达式目录树】来封装EF的BaseDal层的方法 :

         第二十节: 深入理解并发机制以及解决方案(锁机制、EF自有机制、队列模式等):

         第二十一节:ADO层次上的海量数据处理方案(SqlBulkCopy类插入和更新):

         第二十二节: 以SQLServer为例介绍数据库自有的锁机制(共享锁、更新锁、排它锁等)(未完成)  :

         第二十三节: 新的EF框架EF Core的认识(未完成)   :

         第二十四节:    :

         第二十五节:    :

细说ORM之Entity FrameWork系列(被替换)的更多相关文章

  1. Entity Framework系列文章目录

    Entity Framework系列文章目录Entity Framework系列文章目录Entity Framework系列文章目录Entity Framework系列文章目录

  2. ORM之Entity Framework(EF)

    ORM之Entity Framework(EF) 一.下载安装: nuget 搜索Entity Framework安装 EntityFramework.Extension是个扩展库根据需要安装 二.使 ...

  3. ASP.NET Core 中的 ORM 之 Entity Framework

    目录 EF Core 简介 使用 EF Core(Code First) EF Core 中的一些常用知识点 实体建模 实体关系 种子数据 并发管理 执行 SQL 语句和存储过程 延迟加载和预先加载 ...

  4. ORM框架Entity Framework

    博客园在推广ORM方面的确做了很大的贡献,很多的程序员开始使用ORM,不用写SQL的喜悦让他们激动不已,可是好景不长,他们很快发现众多的烦恼一个接一个的出现了. 很遗憾,我并不打算在这篇文章中解决这些 ...

  5. Entity Framework系列文章导航

    转自:http://www.cnblogs.com/xray2005/archive/2011/10/11/2206746.html Entity Framework4.0系列文章 需要说明的是,以下 ...

  6. Entity Framework系列教程汇总

    翻译自http://www.entityframeworktutorial.net/,使用EF几年时间了,一直没有系统总结过,所以翻译这一系统文章作为总结,由于英语功底有限,翻译的可能有些问题,欢迎指 ...

  7. Entity Framework系列

    这个系列主要记录学习EF的过程和碰到的问题以及解决问题的方法. EF中的那些批量操作 EF的Model First

  8. Entity Framework技术导游系列 开篇 (转)

    在微软平台写程序有年头了,随着微软数据存取技术的持续演化,我在程序中先后使用过ODBC.DAO.ADO.ADO.NET.LINQ to SQL. Entity Framework这些技术. 近几年来, ...

  9. [转]Entity Framework技术导游系列开篇与热身

    学习Entity Framework技术期间查阅的优秀文章,出于以后方便查阅的缘故,转载至Blog,可查阅原文:http://blog.csdn.net/bitfan/article/details/ ...

随机推荐

  1. 【HDU - 4340】Capturing a country(树形DP)

    BUPT2017 wintertraining(15) #8A 题意 n(<100)个城市组成的树.A攻击i城市需要a[i]代价,B需要b[i].如果一个城市的邻居被A攻击了,那么A攻击它只要A ...

  2. Leetcode 202.快乐数 By Python

    编写一个算法来判断一个数是不是"快乐数". 一个"快乐数"定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和,然后重复这个过程直到这个数变为 ...

  3. IT人员必须掌握的10项软技能

    现代企业的IT部门员工在具备技术能力的同时,还需要掌握一些软技能.现在来看这些软技能其实并不是什么新鲜事物,只是IT人员所需的这些软技能的范围与数量正在不断增加着. IT人员需要具备哪些技术能力,要取 ...

  4. TCP/IP 和 HTTP 的区别和联系是什么?

    作者:车小胖链接:https://www.zhihu.com/question/38648948/answer/240006409来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注 ...

  5. hdu1272 小希的迷宫(并查集)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1272 题目: 小希的迷宫 Time Limit: 2000/1000 MS (Java/Others) ...

  6. (一)flask-sqlalchemy的安装和配置

    在使用flask-sqlalchemy之前要先了解ORM模型,什么叫做ORM模型 一.什么是ORM ORM 全拼Object-Relation Mapping. 称为对象-关系映射 主要实现模型对象到 ...

  7. ACM-ICPC 2015 BeiJing

    比赛连接:ACM-ICPC 2015 BeiJing 本次比赛只写了 A G     然后 I题随后补 A 有一个正方形土地,上面有若干块绿洲.让你以x0为界限划一条竖线,要求左边绿洲面积>=右 ...

  8. js 判断 是否在当前页面 当前页面是否在前端

    1.使用visibilitychange 浏览器标签页被隐藏或显示的时候会触发visibilitychange事件. document.addEventListener("visibilit ...

  9. 在Vue框架中使用百度地图

    1.首先在index.html中引入百度地图 <script type="text/javascript" src="http://api.map.baidu.co ...

  10. [luogu2292][L语言]

    题目链接 思路 这道题我用的是AC自动机的做法. 先把子串挂到trie树上,在单词结尾打标记的时候,标记的是当前单词的长度.然后去上面查询母串的时候,每查询到一个单词,就建立一条线段,这条线段的结尾位 ...