tnblog
首页
视频
资源
登录
没有个性,不需要签名
排名
38
文章
13
粉丝
3
评论
3
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:50010702506256
欢迎加群交流技术

EF CORE 预先加载,显式加载,延迟加载

9087人阅读 2020/12/22 14:35 总访问:79645 评论:0 收藏:0 手机
分类: .net core

预先加载

读取该实体时,会同时检索相关数据。 此时通常会出现单一联接查询,检索所有必需数据。 可使用 Include 和 ThenInclude 方法指定 Entity Framework Core 中的预先加载。

可在单独查询中检索一些数据,EF 会“修正”导航属性。 也就是说,EF 会自动添加单独检索的实体,将其添加到之前检索的实体的导航属性中所属的位置。 对于检索相关数据的查询,可使用 Load 方法,而不采用返回列表或对象的方法,如 ToList 或 Single。

显式加载

首次读取实体时,不检索相关数据。 如有需要,可编写检索相关数据的代码。 就像使用单独查询进行预先加载一样,显式加载时会向数据库发送多个查询。 二者的区别在于,代码通过显式加载指定要加载的导航属性。 在 Entity Framework Core 1.1 中,可使用 Load 方法执行显式加载。 例如:

延迟加载

首次读取实体时,不检索相关数据。 然而,首次尝试访问导航属性时,会自动检索导航属性所需的数据。 每次首次尝试从导航属性获取数据时,都向数据库发送查询。 Entity Framework Core 1.0 不支持延迟加载。

注意性能

如果知道自己需要每个检索的实体的相关数据,选择预先加载可获得最佳性能,因为相比每个检索的实体的单独查询,发送到数据库的单个查询更加有效。 例如,假设每个系有十个相关课程。 预先加载所有相关数据时,只会进行单一(联接)查询,往返数据库一次。 单独查询每个系的课程时,会往返数据库十一次。 延迟较高时,额外往返数据库对性能尤为不利。
另一方面,在某些情况下,单独查询会更加高效。 在一个查询中预先加载所有相关数据时,可能会生成一个非常复杂的联接,SQL Server 无法有效处理该联接。 或者,如果你正在处理一组实体且只需访问其子集的导航属性,那么采用单独查询可获得更佳性能,因为预先加载所有数据后,会检索不需要的数据。 如果看重性能,那么最好测试两种方式的性能,以便做出最佳选择

评价

EF core检查某个字段是否是主键,ef不查询更新

使用反射检查ef中某个字段是否是主键,使用如下代码即可//检测当前字段是否是主键 varkeys=userm.Property(item.Name).Met...

EF core上下文对象在异步情况下被自动释放的问题。Cannot access a disposed object. A common cause of this error is disposing a context that was resolved

我们看看下面的代码:这里为了节省效率,更新缓存的操作放到了异步中去执行,但是执行到Article findArticle = _articleDAL...

ef EF core 使用原生 SQL 查询

有时候在执行一个赋值一点的sql要动态生成用lamdba来写很不方便,新版本用动态生成表达式树的方式也不怎么行了...需要时间...

EF core 公共接口封装

show me code: public interface ICommonDAL<T> where T : class, new() { protected EFContex...

EF core 简介

Entity Framework Core 简介 今天来讲解一下 .NET 中的重要成员 Entity Framework Core。Entity Framework Core (以下简...

EF core异步方式读取与返回数据

我们这里可以使用异步的方式来读取与返回数据publicasyncTask<IActionResult>Index() { returnView(await_context....

EF core 多对多

EF 6.x 支持多对多关系的隐式联接表,但 EF Core 不支持。有关详细信息,请参阅:https://github.com/dotnet/efcore/issues...

EF core创建组合主键

使用modelBuilder.Entity<Type>().HasKey指定多个字段即可protectedoverridevoidOnModelCreating(ModelBuildermodelB...

EF core 级联删除

和以前的写法有点不同现在没有modelBuilder.Conventions这种用法了,单独开启级联删除的方法也和以前不太一样以前的写法:p...

EF core SqlSugarFreeSqlDapper EF 对比

EF Core优点:微软官方ORM功能强大,支持模式多文档齐全缺点:1.复杂查询生成的SQL语句性能太差(对操作功力要求高)2.一些...

EF core中使用IDesignTimeDbContextFactory的测试方法,调试方法

DesignTimeDbContextFactory的作用 一些EF Core Tools命令(例如Migrations命令)需要在设计时创建一个派生的DbContext实例...

abp vnext连接mysql。.net core连接mysql。EF core连接mysql

增加一个MySQL的库:Volo.Abp.EntityFrameworkCore.MySQL <PackageReference Include="Volo.Abp.EntityFrameworkCo...

abp vnext EF core连接MySql报空引用错,连接SqlServer报空引用错。abp vnext 的坑

使用abp vnext 真的太喜欢报空引用的错了。你报点错给一点具体的错不行么,这样搞起让人去猜太坑了,比如前面的auto_fac没...

EF core code first 忽略映射数据库字段NotMapped

ef core code first 忽略映射数据库字段非常简单使用NotMapped特性即可。 [NotMapped] public string Status { get; set;...

abp vnext 通用仓储 EF core。WhereIf,多条件,动态条件,分页,动态排序等

abp vnext 通用仓储 ef core WhereIf,多条件,分页等public async Task<List<LandInfoDto>> GetListAsync(Pag...