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 ...
随机推荐
- Hive的join表连接查询的一些注意事项
Hive支持的表连接查询的语法: join_table: table_reference JOIN table_factor [join_condition] | table_reference {L ...
- MySQL存储引擎MyISAM与InnoDB区别总结整理
在MySQL的 可重复读隔离级别 中,是解决了幻读的读问题的. 1. MySQL默认存储引擎的变迁 在MySQL 5.5之前的版本中,默认的搜索引擎是MyISAM,从MySQL 5.5之后的版本中,默 ...
- MySQL性能测试工具sysbench的安装和使用
sysbench是一个开源的.模块化的.跨平台的多线程性能测试工具,可以用来进行CPU.内存.磁盘I/O.线程.数据库的性能测试.目前支持的数据库有MySQL.Oracle和PostgreSQL.当前 ...
- oracle goldengate 远程捕获和投递
很早之前,OGG只支持部署在数据库主机上,这叫本地化部署.而现在OGG支持远端部署,即OGG软件不安装在数据库主机上,而是安装在单独的机器上,负责数据抽取和投递. 这样做的好处: l 易于管理 - 在 ...
- linux下nginx编译安装
步骤: 1.获取nginx安装包. 进入nginx官网:http://nginx.org/ 找到稳定版本: 点击红框内的链接. 使用wget获取安装包. wget http://nginx.org/d ...
- K8S学习笔记之CentOS7集群使用Chrony实现时间同步
0x00 概述 容器集群对时间同步要求高,实际使用环境中必须确保集群中所有系统时间保持一致,openstack官方也推荐使用chrony代替ntp做时间同步. Chrony是一个开源的自由软件,像Ce ...
- Yii笔记:打印sql、Form表单、时间插件、Mysql的 FIND_IN_SET函数使用、是否是post/ajax请求
语句部分: yii1版本打印最后一条执行的SQL: $this->getDbConnection()->createCommand()->select()->from()-&g ...
- JavaScript 条件判断算法综合实战
在赌场21点游戏中,玩家可以通过计算牌桌上已经发放的卡牌的高低值来让自己在游戏中保持优势,这就叫21点算法. 根据下面的表格,每张卡牌都分配了一个值.如果卡牌的值大于0,那么玩家应该追加赌注.反之,追 ...
- bzoj5421:收藏家
bzoj5421 贴一张图 关于对问题的转化: 当两个人交换收藏品时,显然我们进行这个操作是为了得到更优解. 那么一个收藏品是有用的,另一个被换走的收藏品可以当做直接扔掉了. 所以只要保留一个就可以了 ...
- go 字符串反转(倒序)
似乎没什么好办法,string的话也得需要先转换成rune再反转再转成string package main import ( "fmt" ) func reverseString ...