关于EF性能优化的讲解,推荐阅读下面的博文
a.Entity Framework 延伸系列目录
b.采用EntityFramework.Extended 对EF进行扩展(Entity Framework 延伸系列2)
c.EntityFramework执行存储过程中遇到的那些坑
介绍EF性能优化前补充EF的优缺点:
1.EF的优点:
* (1)极大提高开发效率。EF是微软自己的产品,跟VS开发工具集成度比较好,开发中代码都是强类型的,写代码效率非常高,自动化程度非常高,采用命令式的编程。
* (2)EF提供的模型设计器非常强大,不仅仅带来了设计数据库的革命,其附带的自动化生成模型代码的功能也极大地提高了开发和架构设计的效率。
* (3)EF跨数据库支持是ORM框架的主要功能点之一,有着仅仅通过改变配置就可以做到跨数据库的能力,更换数据库非常方便。
2.EF的缺点:
* (1)EF性能不好,性能有损耗。(生成sql脚本阶段)在复杂查询的时候生成的SQL脚本效率不是很高。
* (2)数据库端性能损耗是一样的,但是在将对象状态转换为SQL语句时会损失性能。
一、EF性能优化
1.延迟加载的开关
a.默认情况延迟加载是开启的,延迟加载的开启方式有两种:
(1)第一种是在dbcontext中设置
public MyDbContext(System.Data.Common.DbConnection oConnection)
: base(oConnection, true)
{
this.Configuration.LazyLoadingEnabled = true;
}
(2)第二种是在使用DbContext的时候设置
using (var db = new Core.EF.MyDbContext())
{
db.Configuration.LazyLoadingEnabled = false;
var classes= db.T_Student.Where(c => true).FirstOrDefault();
int a = 3;
}
b.当我们不需要使用子表的时候可以关闭延迟加载
using (var db = new Core.EF.MyDbContext())
{
db.Configuration.LazyLoadingEnabled = false;
var classes= db.T_Student.Where(c => true).FirstOrDefault();
int a = 3;
}
c.当我们需要使用子表的时候可以打开延迟加载
using (var db = new Core.EF.MyDbContext())
{
db.Configuration.LazyLoadingEnabled = true;
var c