EF三种加载方法
2016-08-26 10:17
971 查看
EF性能之关联加载
鱼和熊掌不能兼得
——中国谚语
我们已经了解到EF的关联实体加载有三种方式:Lazy Loading,Eager Loading,Explicit Loading,其中Lazy Loading和Explicit Loading都是延迟加载。
(一)Lazy Loading使用的是动态代理,默认情况下,如果POCO类满足以下两个条件,EF就使用Lazy Loading:
POCO类是Public且不为Sealed。
导航属性标记为Virtual。
关闭Lazy Loading,可以将LazyLoadingEnabled设为false,如果导航属性没有标记为virtual,Lazy Loading也是不起作用的。
(二)Eager Loading使用Include方法关联预先加载的实体。
(三)Explicit Loading使用Entry方法,对于集合使用Collection,单个实体则使用Reference。
有下面三个实体:Province,City,Governor,一个Province有多个City,并且只有一个Governor。
[/code]
Lazy Loading
[/code]
Eager Loading
[/code]
Explicti Loading
[/code]
Print方法
[/code]
鱼和熊掌不能兼得
——中国谚语
一、介绍
Entity Framework作为一个优秀的ORM框架,它使得操作数据库就像操作内存中的数据一样,但是这种抽象是有性能代价的,故鱼和熊掌不能兼得。但是,通过对EF的学习,可以避免不必要的性能损失。本篇只介绍关联实体的加载的相关知识,这在我之前的文章中都有介绍。我们已经了解到EF的关联实体加载有三种方式:Lazy Loading,Eager Loading,Explicit Loading,其中Lazy Loading和Explicit Loading都是延迟加载。
(一)Lazy Loading使用的是动态代理,默认情况下,如果POCO类满足以下两个条件,EF就使用Lazy Loading:
POCO类是Public且不为Sealed。
导航属性标记为Virtual。
关闭Lazy Loading,可以将LazyLoadingEnabled设为false,如果导航属性没有标记为virtual,Lazy Loading也是不起作用的。
(二)Eager Loading使用Include方法关联预先加载的实体。
(三)Explicit Loading使用Entry方法,对于集合使用Collection,单个实体则使用Reference。
二、实例
下面通过实例来理解这几种加载方式。有下面三个实体:Province,City,Governor,一个Province有多个City,并且只有一个Governor。
[code]
[/code]
Lazy Loading
[code]
[/code]
Eager Loading
[code]
[/code]
Explicti Loading
[code]
[/code]
Print方法
[code]
[/code]
三、总结
关于关联加载实体基本上就是这些内容吧,如果想看这部分详细的介绍,可以参考我这篇文章的后半部分。总的来说,这部分比较简单,一个LazyLoadingEnabled设置,三种加载方式。Lazy Loading会生成大量的sql,Eager Loading生成的关联查询比较负责,Explicit Loading同Lazy Loading一样生成很多的sql,但是有一些其他优点,比如:导航属性可以不用标注为virtual。如果这几种关联都不能解决实际问题,可以直接使用sql查询。相关文章推荐
- VC中加载LIB文件的方法有以下三种
- JavaScript动态加载CSS的三种方法
- JavaScript动态加载CSS的三种方法
- 加载spring配置文件的常用三种方法
- ASP.NET动态加载Js代码到Head标签中(三种方法)
- JavaScript动态加载CSS的三种方法
- 游戏引擎AndEngine总结(九):三种加载图片资源的方法
- Linux中加载动态链接库的三种方法
- 用VS2010自带的Library Package Manager安装EFCodeFirst出现“无法加载一个或多个请求的类型”错误的解决方法
- freemarker加载模板文件的三种方法
- 加载spring配置文件的常用三种方法
- Asp.net2.0加载用户控件的三种方法
- 加载spring配置文件的常用三种方法
- JavaScript动态加载CSS的三种方法
- 加载Spring配置文件常用的三种方法
- Asp.net2.0加载用户控件的三种方法
- JavaScript动态加载CSS的三种方法
- C#界面皮肤的三种加载方法
- 动态加载Js文件的三种方法
- CakePHP中加载其它类的三种方法比较