如何将EntityFramework的LoadingEntities特性改写成长尾?
- 内容介绍
- 文章标签
- 相关推荐
本文共计2126个文字,预计阅读时间需要9分钟。
Entity Framework 允许控制对象之间的关联,在使用 EF 的过程中,我们经常进行查询操作。当我们进行查询时,哪些数据会被加载到内存中呢?所有数据都需要吗?在一些情况下,以下内容可能会被加载:
Entity Framework允许控制对象之间的关系,在使用EF的过程中,很多时候我们会进行查询的操作,当我们进行查询的时候,哪些数据会被加载到内存中呢?所有的数据都需要吗?在一些场合可能有意义,例如:当查询的实体仅仅拥有一个相关的子实体时可以加载所有的数据到内存中。但是,在多数情况下,你可能并不需要加载全部的数据, 而是只要加载一部分的数据即可。
默认情况下,EF仅仅加载查询中涉及到的实体,但是它支持两种特性来帮助你控制加载:
- 1、贪婪加载
- 2、延迟加载
下面以客户类型、客户和客户邮件三个实体之间的关系来讲解两种加载方式。
从上图可以看出三个实体类之间的关系:
客户类型和客户是一对多的关系:一个客户类型可以有多个客户。
客户和客户邮件是一对一的关系:一个客户只有一个邮箱地址。(假设只有一个邮箱地址)
一、延迟加载(Lazy Loading)
延迟加载:即在需要或者使用的时候才会加载数据。默认情况下,EF使用延迟加载的方式来加载数据。延迟加载是这样一种过程:直到LINQ查询的结果被枚举时,该查询涉及到的相关实体才会从数据库加载。如果加载的实体包含了其他实体的导航属性,那么直到用户访问该导航属性时,这些相关的实体才会被加载。
使用延迟加载必须满足两个条件:
1、实体类是由Public修饰符修饰的,不能是封闭类。
2、导航属性标记为Virtual。
本文共计2126个文字,预计阅读时间需要9分钟。
Entity Framework 允许控制对象之间的关联,在使用 EF 的过程中,我们经常进行查询操作。当我们进行查询时,哪些数据会被加载到内存中呢?所有数据都需要吗?在一些情况下,以下内容可能会被加载:
Entity Framework允许控制对象之间的关系,在使用EF的过程中,很多时候我们会进行查询的操作,当我们进行查询的时候,哪些数据会被加载到内存中呢?所有的数据都需要吗?在一些场合可能有意义,例如:当查询的实体仅仅拥有一个相关的子实体时可以加载所有的数据到内存中。但是,在多数情况下,你可能并不需要加载全部的数据, 而是只要加载一部分的数据即可。
默认情况下,EF仅仅加载查询中涉及到的实体,但是它支持两种特性来帮助你控制加载:
- 1、贪婪加载
- 2、延迟加载
下面以客户类型、客户和客户邮件三个实体之间的关系来讲解两种加载方式。
从上图可以看出三个实体类之间的关系:
客户类型和客户是一对多的关系:一个客户类型可以有多个客户。
客户和客户邮件是一对一的关系:一个客户只有一个邮箱地址。(假设只有一个邮箱地址)
一、延迟加载(Lazy Loading)
延迟加载:即在需要或者使用的时候才会加载数据。默认情况下,EF使用延迟加载的方式来加载数据。延迟加载是这样一种过程:直到LINQ查询的结果被枚举时,该查询涉及到的相关实体才会从数据库加载。如果加载的实体包含了其他实体的导航属性,那么直到用户访问该导航属性时,这些相关的实体才会被加载。
使用延迟加载必须满足两个条件:
1、实体类是由Public修饰符修饰的,不能是封闭类。
2、导航属性标记为Virtual。

