zoukankan      html  css  js  c++  java
  • 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)就可以把相关数据查询出来。

  • 相关阅读:
    Android学习笔记之-Websercive 通讯
    Android学习笔记
    Android学习笔记-Android生成数字证书+签名
    jQuery教程总结
    SQL 数据库备份和恢复 镜像配置(证书方式)
    【网络部分总结的很好的帖子】方便以后找
    【动态规划】最长递增子序列
    【美团~牛客】十六进制转十进制
    【二分查找】及相关问题
    【动态规划】
  • 原文地址:https://www.cnblogs.com/zhangjd/p/9185397.html
Copyright © 2011-2022 走看看