1. 什么是EF

微软提供的ORM工具. ORM让开发人员节省数据库访问代码的时间. 将更多的时间放在业务逻辑层面上. 开发人员使用linq语言, 对数据库进行操作.

2. EF的使用场景

EF有三种使用场景: 1.从数据库生成class.(即所谓的DB first) 2.  由实体类生成数据库表结构.(code first) 3. 通过数据库可视化设计器涉及数据库, 同时生成实体类.(model first)

如果对于没有使用过EF的人来说这种含糊其辞的概念很难以理解.其实就是一个先后关系, 先有数据表结构还是先有对应的实体类的问题.

3. Entity Framework 特性:

理解EF的各项特性将成为是否真正懂得使用EF的关键.以及判断一个人使用EF的深入程度.

  • 跨平台性, cross-plantform: EF core是一个跨平台的框架. 可以在windows, linux, 和mac系统上运行.
  • 模块性, modelling: EF创建一个EF model, 对相关联的数据库是以模块级别的数据进行存储和获取.
  • 可查询, 可以使用linq查询语句获取数据.数据库会将linq的查询语句转化成db指定的查询语言.
  • 可跟踪变更: EF会跟踪需要提交到数据库的实体实例(属性值)发生的更改.
  • 可保存: 当调用SaveChanges()方法时,EF会根据实体发生的更改对数据库执行INSERT,UPDATE和DELETE命令。 EF还提供异步SaveChangesAsync()方法.
  • Concurrency 并发: EF默认使用Optimistic Concurrency(开放式并发)来保护覆盖其他用户所做的更改,因为数据是从数据库中提取的.
  • Transactions 事务: EF在查询或保存数据时执行自动事务管理(自动事务管理)。 它还提供自定义事务管理的选项.
  • Caching 缓存机制: EF包括开箱即用的第一级缓存。 因此,重复查询将从缓存中返回数据,而不是访问数据库.
  • Built-in Conventions 内置约定: EF遵循配置编程模式的约定,并包括一组自动配置EF模型的默认规则.
  • Configurations 可配置: EF允许我们使用数据注释属性或Fluent API来配置EF模型以覆盖默认约定.
  • Migrations 支持迁移: EF提供了一组可在NuGet包管理器控制台或命令行界面上执行的迁移命令,以创建或管理底层数据库模式.

4. EF如何进行工作.

EF的api可以在实体类和DB之间建立一个映射关系. 并且使用linq语句对Entity进行造作, 并且最终save change.

EF api将linq-entities 查询语句转义为sql 查询语句, 将数据库中的Entity data model查询出来后转化成Entity

5. EF对数据库操作性能优化途径

这里只是简单列举一些可以优化查询的手段

  1. 如果查询中包含多表查询, linq在拼写时, 可以添加include使用连接查询,例如 db.scores.take(100).include(t => t.studen).tolist()
  2. 如果对于查询的结果只使用部分字段, 那么没有必要将所有数据都查出来放入内存, 影响内存的空间以及程序与数据库传输带宽.例如: var scores = db.scores.take(100).include(t => t.student).select(t => new {t.chinese, t.createdtime, studentName = t.student.name}).tolist()
  3. 循环中慎用查询
  4. asNonUnicode && asNoTracking 字面意思是无跟踪查询, 查询出来的对象不能更改. 如果对数据集合仅仅是用作显示, 不需要修改并更新到数据库的时候, 可以使用.
  5. ANY.

6. EF对于代码优化途径

6.1 在查询数据库返回结果集的时候经常会对结果集进行排序操作. 实际的项目中往往也会根据前端传递过来的字段以及排序参数来拼写查询语句进行查询. 但是当前端字段数量比较多的时候, 代码怎么写比较优雅呢.

正常来说会用一个switch来根据不同的情况去拼写query语句中的orderby. 但是当case无限多的时候, 我们可以使用system.linq.dynamic, 编写orderby的扩展方法.

6.2 一篇比较好的关于EF性能优化的文章:

https://www.cnblogs.com/hantianwei/archive/2013/04/26/3044157.html

感谢阅读.如有问题随时可联系: Dennis

entity framework浅谈的更多相关文章

  1. 浅谈Entity Framework中的数据加载方式

    如果你还没有接触过或者根本不了解什么是Entity Framework,那么请看这里http://www.entityframeworktutorial.net/EntityFramework-Arc ...

  2. 浅谈对Spring Framework的认识

    Spring Framework,作为一个应用框架,官方的介绍如下: The Spring Framework provides a comprehensive programming and con ...

  3. 简谈Entity Framework的优缺点

    Entity Framework简介 Entity Framework的全称为 ADO.NET Entity Framework ,简称为EF, 是微软以ADO.NET为基础发展出来的实体框架,早期被 ...

  4. 【转】.NET(C#):浅谈程序集清单资源和RESX资源 关于单元测试的思考--Asp.Net Core单元测试最佳实践 封装自己的dapper lambda扩展-设计篇 编写自己的dapper lambda扩展-使用篇 正确理解CAP定理 Quartz.NET的使用(附源码) 整理自己的.net工具库 GC的前世与今生 Visual Studio Package 插件开发之自动生

    [转].NET(C#):浅谈程序集清单资源和RESX资源   目录 程序集清单资源 RESX资源文件 使用ResourceReader和ResourceSet解析二进制资源文件 使用ResourceM ...

  5. 在net中json序列化与反序列化 面向对象六大原则 (第一篇) 一步一步带你了解linq to Object 10分钟浅谈泛型协变与逆变

    在net中json序列化与反序列化   准备好饮料,我们一起来玩玩JSON,什么是Json:一种数据表示形式,JSON:JavaScript Object Notation对象表示法 Json语法规则 ...

  6. 手撸ORM浅谈ORM框架之Add篇

    快速传送 手撸ORM浅谈ORM框架之基础篇 手撸ORM浅谈ORM框架之Add篇 手撸ORM浅谈ORM框架之Update篇 手撸ORM浅谈ORM框架之Delete篇 手撸ORM浅谈ORM框架之Query ...

  7. 手撸ORM浅谈ORM框架之Update篇

    快速传送 手撸ORM浅谈ORM框架之基础篇 手撸ORM浅谈ORM框架之Add篇 手撸ORM浅谈ORM框架之Update篇 手撸ORM浅谈ORM框架之Delete篇 手撸ORM浅谈ORM框架之Query ...

  8. 手撸ORM浅谈ORM框架之Delete篇

    快速传送 手撸ORM浅谈ORM框架之基础篇 手撸ORM浅谈ORM框架之Add篇 手撸ORM浅谈ORM框架之Update篇 手撸ORM浅谈ORM框架之Delete篇 手撸ORM浅谈ORM框架之Query ...

  9. 手撸ORM浅谈ORM框架之Query篇

    快速传送 手撸ORM浅谈ORM框架之基础篇 手撸ORM浅谈ORM框架之Add篇 手撸ORM浅谈ORM框架之Update篇 手撸ORM浅谈ORM框架之Delete篇 手撸ORM浅谈ORM框架之Query ...

随机推荐

  1. Spark学习之路 (十四)SparkCore的调优之资源调优JVM的GC垃圾收集器

    一.概述 垃圾收集 Garbage Collection 通常被称为“GC”,它诞生于1960年 MIT 的 Lisp 语言,经过半个多世纪,目前已经十分成熟了. jvm 中,程序计数器.虚拟机栈.本 ...

  2. mitmproxy 中间人攻击的小玩笑

    import mitmproxy.http from mitmproxy import ctx, http class Joker: def request(self, flow: mitmproxy ...

  3. python type的用法

    目录 描述 语法 用法 type和isinstance Type和Object 描述 python的 type 函数有两个用法,当只有一个参数的时候,返回对象的类型.当有三个参数的时候返回一个类对象. ...

  4. Linux基础命令---验证组文件grpck

    grpck grpck指令可以验证组文件“/etc/group”和“/etc/gshadow”的完整性.检查的内容包括:正确的字段数.唯一有效的组名称.有效的组标识符.成员和管理员的有效列表.“/et ...

  5. 浅析PAC,修改PAC文件及user-rule文件实现自动代理

    浅析PAC,修改PAC文件及user-rule文件实现自动代理 代理自动配置(英语:Proxy auto-config,简称PAC)是一种网页浏览器技术,用于定义浏览器该如何自动选择适当的代理服务器来 ...

  6. Install kubernetes without yum

    下载最新版本: https://github.com/kubernetes/kubernetes/releases 下载kubernetes.tar.gz即可 解压缩后到cluster目录下 执行ge ...

  7. 自写Jquery插件 Datagrid

    原创文章,转载请注明出处,谢谢!https://www.cnblogs.com/GaoAnLee/p/9086582.html 废话不多说,先上个整体效果: html <div id='data ...

  8. Oracle与MySQL区别

    MyBatis中模糊查询,mysql可以用concat,而oracle用"||"; 另外,mysql支持主键自增,而oracle不支持主键自增.

  9. Python笔记 #20# SOM

    SOM(自组织映射神经网络)是一种可以根据输入对象的特征自动进行分类(聚类)的神经网络.向该网络输入任意维度的向量都会得到一个二维图像, 不同特征的输入会被映射到二维图像的不同地方(所以SOM也可以用 ...

  10. 用到临时表空间的几种SQL

    用到临时表空间的几种SQL CREATE INDEX SELECT ... ORDER BY SELECT DISTINCT ... SELECT ... GROUP BY SELECT ... UN ...