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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值