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 ...
随机推荐
- string 常量池 栈 堆
- log4j2笔记 #01# Architecture
索引 Architecture Main Components Logger Hierarchy LoggerContext Configuration Logger LoggerConfig Fil ...
- Tencent QQ现在就是一个十八层地狱下面的大恶魔-删除右键里的"通过QQ发送到"
都是流氓软件, 有人推荐装什么管家什么助手来清除, 那就是请走一个流氓又引进另外一个流氓. 下面的注册表项直接手工删除 32位系统: windows Registry Editor Version 5 ...
- v-text v-html等指令的使用
v-text:以纯文本方式显示数据: v-html:可以识别HTML标签: v-once:只渲染元素或组件一次: v-pre:不进行编译,直接显示内容: v-cloak:可以隐藏未编译的 Mustac ...
- 哪些个在 Sublime Text 下,"任性的" 好插件!
我在sublime里面安装了以下有利于项目开发高效的插件: 1:SVN 源代码版本控制 2:LiveReload 浏览器实时刷新 3:jsMinifier 压缩 j ...
- host元素的属性autoDeploy和reloadable的区别
web.xml文件的修改会触发AutoDeploy,受host节的autoDeploy配置值的影响. class类文件修改会触发Reload操作,受reloadable配置值的影响. 而autoDep ...
- direct加载之ora-39782一例
近日,我们有个环境在数据加载到oracle的时候出现ora-39782异常,版本是11.2.经google,几乎没有什么先例,因为我们是使用oci直接写的,可见现在还使用oci接口并不多,也或者我们的 ...
- Android之xml解析
利用类下载器解析Xml文件要解析的xml文件<?xml version="1.0" encoding="utf-8"?><info> & ...
- 如何将你的github仓库部署到github pages(转)
原文地址:http://www.cnblogs.com/yuanzm/p/3945814.html#commentform 很多时候我都在思考一个问题,我们每天遇到各种各样的问题,然后我们需要不断go ...
- Magnum Kubernetes源码分析(一)
Magnum版本说明 本文以magnum的mitaka版本代码为基础进行分析. Magnum Kubernetes Magnum主要支持的概念有bay,baymodel,node,pod,rc,ser ...