zoukankan      html  css  js  c++  java
  • 延迟加载转换为即使加载

    一、LoadWith的使用(对加载的数据没有限制)
        DataClasses1DataContext datacontext = new DataClasses1DataContext();
      //如果不设置为false,则LoadWith也没起到什么作用(无效),
        datacontext.DeferredLoadingEnabled = false;//关闭延迟加载采用及时加载
        DataLoadOptions options = new DataLoadOptions();
      //如果关闭了延迟加载,也未采用LoadWith进行加载,则加载Products类的时候Categories=null和OrderDetails=null 没有值 ,因为未加载嘛
       //如果未关闭延迟加载,采用或者未采用LoadWith进行加载,则加载Products类的时候Categories和OrderDetails都有值,因为未关闭延迟加载,将加载所有数据 . 
    这样在很多情况下是不建议这么做的,浪费资源,加载了也不用(有可能加载Products的时候我只需要Categories对象的值不需要OrderDetails的值)
      //Categories属性和OrderDetails属性来自于Products中的主外键关系的配置
    options.LoadWith<Products>(a => a.Categories);//加载Products类的同时也加载了关联属性Categories
        options.LoadWith<Products>(a => a.OrderDetails);//加载Products类的同时也加载了关联属性OrderDetails
    
    
       datacontext.LoadOptions = options;
    var categoriesload = datacontext.Products.Select(a => a).ToList();
    总结:
    (使用即使加载后,转换为多表的联合查询,只需要执行一次,就可以获取到关联对象属性的值,这样也有弊端,读取的是整张表的数据,这样返回的数据量比使用延迟加载时更大,而且可能返回不被使用的一些数据).

    二、AssociateWith的使用(对加载的数据有一定的限制)
        DataClasses1DataContext datacontext = new DataClasses1DataContext();
      //如果不设置为false,则AssociateWith也没起到什么作用(无效),
        datacontext.DeferredLoadingEnabled = false;//关闭延迟加载采用及时加载
        DataLoadOptions options = new DataLoadOptions();
      //如果关闭了延迟加载,也未采用LoadWith进行加载,则加载Products类的时候OrderDetails=null 没有值 ,因为未加载嘛
       ,就是用了LoadWith也未达到我们要的效果,因为获取的是OrderDetails中所有的数据,而我需要的不是这些,所以在使用AssociateWith的混合,来设置加载条件
        //如果未关闭延迟加载,采用或者未采用LoadWith进行加载,则加载Products类的时候OrderDetails,Categories等外键表都有值,因为未关闭延迟加载,将加载所有数据 . 
    这样在很多情况下是不建议这么做的,浪费资源,加载了也不用(有可能加载Products的时候我只需要OrderDetails对象中某些数据
      //OrderDetails属性来自于Products中的主外键关系的配置
      //--混合使用
    options.LoadWith<Products>(a=>a.OrderDetails);
      //加载主键表(Products)的所有数据的同时加载外键表(OrderDetails)ProductID=2的数据
      //Products是OrderDetails的外键表
       options.AssociateWith<Products>(a => a.OrderDetails.where(b=>b.ProductID==2));
    
    
       datacontext.LoadOptions = options;
    var categoriesload = datacontext.Products.Select(a => a).ToList();
     
    总结:
    
    
    (使用即使加载和AssociateWith后,转换为多表的联合查询,只需要执行一次,就可以获取到关联对象属性的某些数据,并且可以避免获取不必要的数据,减少了数据的加载量).

    如果有异议,请大家多拍砖头,多多指教.
     
  • 相关阅读:
    jQuery EasyUI实现全部关闭tabs
    设计与实现模块管理系统基本功能定义自己(28--所述多个模块之间的关联[4])
    C++11的一些功能
    表和视图之间的区别
    三个思路来实现自己定义404页面
    WebGL 在 OpenGL ES 指令 iOS 在 C 分歧版指令分析
    hdoj 2183 奇数阶魔方(II) 【模拟】+【法】
    新浪、万网前系统架构师高俊峰:统一监控报警平台架构设计思路
    this compilation unit is not on the build path of a java project
    Ecshop wap
  • 原文地址:https://www.cnblogs.com/wang726zq/p/loadwith.html
Copyright © 2011-2022 走看看