博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ORM系列之Entity FrameWork详解
阅读量:6714 次
发布时间:2019-06-25

本文共 2234 字,大约阅读时间需要 7 分钟。

一. 谈情怀

   从第一次接触开发到现在(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的脚本效率上。

四. 系列章节

         

         

         

         

         

          。

         

         

         

         

         

         

         

         

         

         

         

         

         

         

         

           :

         

         

         

 

 

   PS:EF Core 将单独一个系列,敬请期待。。。。     该系列的EF后续将持续更新。

 

 

!

  • 作       者 : Yaopengfei(姚鹏飞)
  • 博客地址 :
  • 声     明1 : 本人才疏学浅,用郭德纲的话说“我是一个小学生”,如有错误,欢迎讨论,请勿谩骂^_^。
  • 声     明2 : 原创博客请在转载时保留原文链接或在文章开头加上本人博客地址
 

转载于:https://www.cnblogs.com/yaopengfei/p/9196962.html

你可能感兴趣的文章
自定义控件实践-倒计时控件
查看>>
《JavaScript高级程序设计(第三版)》
查看>>
随手记 - Springboot Application Properties 值
查看>>
java B2B2C Springcloud多租户电子商城系统- 分布式事务
查看>>
屏幕方向读取与锁定:Screen Orientation API
查看>>
记:解决angular报错'Missing locale data for the locale "zh-cn"
查看>>
【半月刊 2】前端高频面试题及答案汇总
查看>>
contentSize, contentInset 和 contentOffset的含义
查看>>
vue全家桶
查看>>
springMVC---配置文件解析(web.xml)
查看>>
angular4微信公众号开发遇到的问题
查看>>
React写个GitHub项目管理面板
查看>>
Redis 集群分片&分布式锁的使用
查看>>
String类型
查看>>
一致性 Hash 算法的实际应用
查看>>
个推微服务网关架构实践
查看>>
自定义标签的编码
查看>>
用一张图总结web缓存策略
查看>>
re模块与正则表达式
查看>>
第十天-《企业应用架构模式》-数据源架构模式
查看>>