zoukankan      html  css  js  c++  java
  • 【EF学习笔记06】----------加载关联表的数据 延迟加载

    讲解之前,先来看一下我们的数据库结构:班级表 学生表

    延迟加载

    //延迟加载
    using (var db = new Entities())
    {
        //查询班级
        var classes = (from v in db.Classes
                        where v.ClassName == "机电10501"
                        select v).Single();
        if (classes.Student != null)
        {
            //遍历该班级所有学生
            foreach (var st in classes.Student)
            {
                ObjectDumper.Write(st.StudentName);
            }
        }
    }

    追踪SQL语句:

    说明:主表使用.运算符调用从表都是延迟加载 导航属性需要设置为(virtual)
    此处执行了两句SQL 先查询班级表->再查询学生表

    不恰当的使用延迟加载会发送很多多余的sql

    演示程序:遍历所有班级和学生

    using (var db = new Entities())
    {
        //遍历班级
        foreach(var cls in db.Classes)
        {
            Console.WriteLine("========="+cls.ClassName);
            //遍历该班级所有学生
            foreach (var st in cls.Student)
            {
                ObjectDumper.Write(cls.ClassName + "-" + st.StudentName);
            }
        }
    }

    追踪SQL语句:

    说明:此处执行了5条SQL语句,先查询所有班级,然后根据每个班级ID 查询 各班学生。

    关闭延迟加载有两种方式:

    方法一:去掉Virtual修饰 如图

    执行代码:

    结果:

    此处只执行了一条SQL,所以未加载出学生信息。

    方法二:在Entities上下本类构造函数中调用 Configuration.LazyLoadingEnabled =false

    执行结果相同:

  • 相关阅读:
    动态规划--数字三角形问题
    C#操作Office.word(一)
    【算法参考】动态规划
    数据结构--图的定义和存储结构
    重定向输入输出流--freopen
    C++内联函数、函数模板之于头文件
    C++静态局部对象
    C++函数模板
    条款05:了解C++默默编写并调用哪些函数
    设计模式 之 装饰器模式
  • 原文地址:https://www.cnblogs.com/gosky/p/5752502.html
Copyright © 2011-2022 走看看