首页
视频
资源
登录
悟小小空
没有个性,不需要签名
博主信息
排名
6
文章
6
粉丝
16
评论
8
文章类别
linux
2篇
docker
0篇
.net core
11篇
最新文章
最新评价
{{item.articleTitle}}
{{item.blogName}}
:
{{item.content}}
关于我们
ICP备案 :
渝ICP备18016597号-1
网站信息:
2018-2024
TNBLOG.NET
技术交流:
群号656732739
联系我们:
contact@tnblog.net
欢迎加群
欢迎加群交流技术
原
EF CORE 预先加载,显式加载,延迟加载
6808
人阅读
2020/12/22 14:35
总访问:
58903
评论:
0
收藏:
0
手机
分类:
.net core
####预先加载 读取该实体时,会同时检索相关数据。 此时通常会出现单一联接查询,检索所有必需数据。 可使用 Include 和 ThenInclude 方法指定 Entity Framework Core 中的预先加载。 ![](https://img.tnblog.net/arcimg/13983647446/8601ff3d8e1f479ba43b8e25ec58e318.png) 可在单独查询中检索一些数据,EF 会“修正”导航属性。 也就是说,EF 会自动添加单独检索的实体,将其添加到之前检索的实体的导航属性中所属的位置。 对于检索相关数据的查询,可使用 Load 方法,而不采用返回列表或对象的方法,如 ToList 或 Single。 ![](https://img.tnblog.net/arcimg/13983647446/9fed5c8e79bd4d1fac3ff00f6b8ef750.png) ####显式加载 首次读取实体时,不检索相关数据。 如有需要,可编写检索相关数据的代码。 就像使用单独查询进行预先加载一样,显式加载时会向数据库发送多个查询。 二者的区别在于,代码通过显式加载指定要加载的导航属性。 在 Entity Framework Core 1.1 中,可使用 Load 方法执行显式加载。 例如: ![](https://img.tnblog.net/arcimg/13983647446/1d3786250e894832a4bce28ceffb0b05.png) ####延迟加载 首次读取实体时,不检索相关数据。 然而,首次尝试访问导航属性时,会自动检索导航属性所需的数据。 每次首次尝试从导航属性获取数据时,都向数据库发送查询。 Entity Framework Core 1.0 不支持延迟加载。 ####注意性能 如果知道自己需要每个检索的实体的相关数据,选择预先加载可获得最佳性能,因为相比每个检索的实体的单独查询,发送到数据库的单个查询更加有效。 例如,假设每个系有十个相关课程。 预先加载所有相关数据时,只会进行单一(联接)查询,往返数据库一次。 单独查询每个系的课程时,会往返数据库十一次。 延迟较高时,额外往返数据库对性能尤为不利。 另一方面,在某些情况下,单独查询会更加高效。 在一个查询中预先加载所有相关数据时,可能会生成一个非常复杂的联接,SQL Server 无法有效处理该联接。 或者,如果你正在处理一组实体且只需访问其子集的导航属性,那么采用单独查询可获得更佳性能,因为预先加载所有数据后,会检索不需要的数据。 如果看重性能,那么最好测试两种方式的性能,以便做出最佳选择
👈{{preArticle.title}}
👉{{nextArticle.title}}
评价
{{titleitem}}
{{titleitem}}
{{item.content}}
{{titleitem}}
{{titleitem}}
{{item.content}}