entity framework浅谈
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对数据库操作性能优化途径
这里只是简单列举一些可以优化查询的手段
- 如果查询中包含多表查询, linq在拼写时, 可以添加include使用连接查询,例如 db.scores.take(100).include(t => t.studen).tolist()
- 如果对于查询的结果只使用部分字段, 那么没有必要将所有数据都查出来放入内存, 影响内存的空间以及程序与数据库传输带宽.例如: var scores = db.scores.take(100).include(t => t.student).select(t => new {t.chinese, t.createdtime, studentName = t.student.name}).tolist()
- 循环中慎用查询
- asNonUnicode && asNoTracking 字面意思是无跟踪查询, 查询出来的对象不能更改. 如果对数据集合仅仅是用作显示, 不需要修改并更新到数据库的时候, 可以使用.
- 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浅谈的更多相关文章
- 浅谈Entity Framework中的数据加载方式
如果你还没有接触过或者根本不了解什么是Entity Framework,那么请看这里http://www.entityframeworktutorial.net/EntityFramework-Arc ...
- 浅谈对Spring Framework的认识
Spring Framework,作为一个应用框架,官方的介绍如下: The Spring Framework provides a comprehensive programming and con ...
- 简谈Entity Framework的优缺点
Entity Framework简介 Entity Framework的全称为 ADO.NET Entity Framework ,简称为EF, 是微软以ADO.NET为基础发展出来的实体框架,早期被 ...
- 【转】.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 ...
- 在net中json序列化与反序列化 面向对象六大原则 (第一篇) 一步一步带你了解linq to Object 10分钟浅谈泛型协变与逆变
在net中json序列化与反序列化 准备好饮料,我们一起来玩玩JSON,什么是Json:一种数据表示形式,JSON:JavaScript Object Notation对象表示法 Json语法规则 ...
- 手撸ORM浅谈ORM框架之Add篇
快速传送 手撸ORM浅谈ORM框架之基础篇 手撸ORM浅谈ORM框架之Add篇 手撸ORM浅谈ORM框架之Update篇 手撸ORM浅谈ORM框架之Delete篇 手撸ORM浅谈ORM框架之Query ...
- 手撸ORM浅谈ORM框架之Update篇
快速传送 手撸ORM浅谈ORM框架之基础篇 手撸ORM浅谈ORM框架之Add篇 手撸ORM浅谈ORM框架之Update篇 手撸ORM浅谈ORM框架之Delete篇 手撸ORM浅谈ORM框架之Query ...
- 手撸ORM浅谈ORM框架之Delete篇
快速传送 手撸ORM浅谈ORM框架之基础篇 手撸ORM浅谈ORM框架之Add篇 手撸ORM浅谈ORM框架之Update篇 手撸ORM浅谈ORM框架之Delete篇 手撸ORM浅谈ORM框架之Query ...
- 手撸ORM浅谈ORM框架之Query篇
快速传送 手撸ORM浅谈ORM框架之基础篇 手撸ORM浅谈ORM框架之Add篇 手撸ORM浅谈ORM框架之Update篇 手撸ORM浅谈ORM框架之Delete篇 手撸ORM浅谈ORM框架之Query ...
随机推荐
- Spark学习之路 (二)Spark2.3 HA集群的分布式安装
一.下载Spark安装包 1.从官网下载 http://spark.apache.org/downloads.html 2.从微软的镜像站下载 http://mirrors.hust.edu.cn/a ...
- memcache、redis、mongoDB 如何选择?
不同的 Nosql,其实应用的场景各有不同,所以我们应该先了解不同Nosql 之间的差别,然后分析什么才是最适合我使用的 Nosql. Nosql 介绍 Nosql 的全称是 Not Only Sql ...
- importlib
Python提供了importlib包作为标准库的一部分.目的就是提供Python中import语句的实现(以及__import__函数).另外,importlib允许程序员创建他们自定义的对象,可用 ...
- 仿照admin的stark自定义组件的功能实现
仿照admin的stark自定义组件的功能实现:其中最主要的就是增删改查的实现 1.查:首先页面中显示表头和数据,都是动态的,而不是写死的. (1) 先看表头和表单数据:这个是查看的视图函数,但是为了 ...
- Mini-Batch 、Momentum、Adam算法的实现
Mini-Batch 1. 把训练集打乱,但是X和Y依旧是一一对应的 import numpy as np a = np.random.randn(3,3) print(a) b = list(np. ...
- Kylin, Mondrian, Saiku系统的整合
本文主要介绍有赞数据团队为了满足在不同维度查看.分析重点指标的需求而搭建的OLAP分析工具.这个工具对Kylin.Mondrian以及Saiku做了一个整合,主要工作包括一些定制化的修改以及环境的配置 ...
- golang学习笔记15 golang用strings.Split切割字符串
golang用strings.Split切割字符串 kv := strings.Split(authString, " ") if len(kv) != 2 || kv[0] != ...
- .NET 常用ORM之Nbear
NBear是一个基于.Net 2.0.C#2.0开放全部源代码的的软件开发框架类库.NBear的设计目标是尽最大努力减少开发人员的工作量,最大程度提升开发效率,同时兼顾性能及可伸缩性. 一.新建项目并 ...
- Linux中USB协议栈的框架简介
文本旨在简单介绍一下Linux中USB协议栈的代码框架: 下图是USB协议栈相关数据结构的关系图: 下面结合上图看一下系统初始化的流程: 1.USB子系统初始化:\drivers\usb\core\u ...
- 判断PC或mobile设备
js 限制: <script type="text/javascript"> function uaredirect(f){try{if(document.getEle ...