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

    执行结果相同:

  • 相关阅读:
    牛客网 二叉树的镜像 JAVA
    牛客网 反转链表 JAVA
    牛客网 调整数组顺序使奇数位于偶数前面 JAVA
    Integer to Roman LeetCode Java
    Valid Number leetcode java
    Longest Common Prefix
    Wildcard Matching leetcode java
    Regular Expression Matching
    Longest Palindromic Substring
    Add Binary LeetCode Java
  • 原文地址:https://www.cnblogs.com/gosky/p/5752502.html
Copyright © 2011-2022 走看看