EF中的预先加载和延迟加载

延迟加载(Lazy Loading):当实体第一次被读取时,相关数据不会被获取,只会读取本身。延迟加载的数据不会一次性查出来,而是一条一条的查询,这样就会多次请求数据库进行查询。

预先加载<Eager Loading>:预先加载会把所有的数据一次性从数据库中读取出来,预先加载就是从数据库中一次性查询所有数据,存放到内存中。

写个例子:一般我是这么处理的

1、在数据库上下文中禁用延迟加载

  public DBaseContext() : base("MHaloDBaseContext")
   {
        this.Configuration.LazyLoadingEnabled = false;
   }

因为上下文是默认延迟加载的,这样做的结果是所有的默认为预先加载。

2、下面定义一个类,说明一下

 public class Recruit : EntityBase
 {
     public Recruit()
      {
            IsShow = true;
      }
      public string Name { get; set; }

      public string Describe { get; set; }

      public int OrderId { get; set; }

      public bool IsShow { get; set; }

      public int JobCategoryId { get; set; }

      public virtual JobCategory JobCategory { get; set; }
  }

在查询Recruit 这个类的时候不会加载关联类JobCategory 的相关数据,因为我们用了virtual 关键字,只有显式调用时才会加载,如果去掉virtual 关键字,关联类JobCategory 的相关数据就会被加载。

3、如果需要关联表数据则用Include()

var list = recSvc.Res.Table()
   .Pager(filter, o => o.OrderByDescending(s => s.Id), out total, query.page, query.rows).Include(s => s.JobCategory).ToList();

查询的时候用.Include(s => s.JobCategory)就可以把相关数据查询出来。

原文地址:https://www.cnblogs.com/zhangjd/p/9185397.html

时间: 2024-10-01 20:11:02

EF中的预先加载和延迟加载的相关文章

EF中的贪婪加载和延迟加载(懒加载)

在上一章中,我们使用了Linq对Entity Framework进行了一个查询,但是通过学习我们却发现了懒加载给我来的性能上的开销是很到的,尤其是在循环中,如果数据量不是很多的情况下还可以接受,如果数据量一旦大气来,那么这个效率则是影响非常大的.那该怎么办呢?其实在Entity Framwork中,除了提供了懒加载技术还提供了一个“贪婪加载”.那么什么是贪婪加载呢?从名字上看,就是非常的粗鲁的,一次性的吧相关的数据全部查询出来,虽然在性能上说还是有点影响的,但是比起在循环中使用懒加载要强了不少了

EF6基础系列(九)---预先加载、延迟加载、显示加载

1.预先加载: 预先加载:在对一种类型的实体进行查询时,将相关的实体作为查询的一部分一起加载.预先加载可以使用Include()方法实现. 1.加载一个相关实体类型 栗子:使用Include()方法从数据库中获取所有学生及成绩级别.导航属性实现预先加载: using (var ctx = new SchoolDBEntities()) { var stud1 = ctx.Students .Include("Standard") .Where(s => s.StudentName

学习EF之贪懒加载和延迟加载(2)

通过昨天对EF贪婪加载和延迟加载的学习,不难发现,延迟加载还是很好用的,但是问题也就来了,有的时候我们只需要加载一个实体,不需要和他相关的外部实体,这时候我们来看看EF延迟加载时怎么作用的吧 打开profiler 在Main函数入口处写一个查询,在Console.Read();处打一个断点 static void Main(string[] args) { var context = new EFDbContext(); var user = context.Users.FirstOrDefau

EF include 预先加载

在asp.net mvc 中,常在控制器中预先加载导航属性,以便在视图中能够显示起关联的数据. 如果不预先加载,View中就会无法呈现外键的 关联数据. 会提示EF 错误发生. 一. 模型: public class Department { public int DepartmentID { get; set; } [StringLength(50, MinimumLength = 3),Display(Name="部门名称")] public string Name { get;

解决hibernate中的懒加载(延迟加载)问题

解决hibernate中的懒加载(延迟加载)问题 我们在开发的时候经常会遇到延迟加载问题,在实体映射时,多对一和多对多中,多的一样的属性默认是lazy="true"(即,默认是延迟加载), 如:<many-to-one name="parent" class="Department" column="parentId" lazy="true"/> 延迟加载表现在:比如:我们要查询id为2的部门数

[翻译][MVC 5 + EF 6] 7:加载相关数据

原文:Reading Related Data with the Entity Framework in an ASP.NET MVC Application 1.延迟(Lazy)加载.预先(Eager)加载.显式(Explicit)加载: EF加载相关数据到实体导航属性有以下几种方式: 延迟加载:当实体第一次读取时,相关数据没有加载.当第一次试图访问导航属性时,所需的导航数据自动加载.这导致多条查询语句被发送到数据库:一条查询实体本身,一条查询实体相关数据.DbContext类默认启用延迟加载

浅谈Entity Framework中的数据加载方式

小分享:我有几张阿里云优惠券,用券购买或者升级阿里云相应产品最多可以优惠五折!领券地址:https://promotion.aliyun.com/ntms/act/ambassador/sharetouser.html?userCode=ohmepe03 如果你还没有接触过或者根本不了解什么是Entity Framework,那么请看这里http://www.entityframeworktutorial.net/EntityFramework-Architecture.aspx,其中的一系列文

ViewPager+Fragment取消预加载(延迟加载)

在项目中,都或多或少地使用的Tab布局,所以大都会用到ViewPager+Fragment,但是Fragment有个不好或者太好的地方.例如你在ViewPager中添加了三个Fragment,当加载ViewPager中第一个Fragment时,它会默认帮你预先加载了第二个Fragment,当你加载第二个Fragment时,它会帮你加载第三个Fragment.这样虽然有时很好,但是用户只需看一个Fragment时,我们就做了一些多余工作加载了第二个Fragment.在这只需要取消Fragment的

《Entity Framework 6 Recipes》中文翻译系列 (23) -----第五章 加载实体和导航属性之预先加载与Find()方法

翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 5-2  预先加载关联实体 问题 你想在一次数据交互中加载一个实体和与它相关联实体. 解决方案 假设你有如图5-2所示的模型. 图5-2 包含Customer和与它相关联信息的实体 和5-1节一样,在模型中,有一个Customer实体,一个与它关联的CustomerType和多个与它关联的CustomerEamil.它与CustomerType的关系是一对多关系,这是一个实体引用(译注:Cu