zoukankan      html  css  js  c++  java
  • 加载关联表的数据 显式加载

    显式加载

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

    加载从表集合类型

    复制代码
    //显示加载
    Console.WriteLine("=========查询集合===========");
    using (var db = new Entities())
    {
        var query = from v in db.Classes
                    where v.ClassName == "机电10501"
                    select v;
        var cls = query.Single();
        db.Entry(cls).Collection(v => v.Student).Load();//加载集合使用Collection方法
        Console.WriteLine("==========="+cls.ClassName);
        foreach (var stu in cls.Student)
        {
            Console.WriteLine(stu.StudentName);
        }
    
        //IsLoaded方法判断数据是否已经加载
        Console.WriteLine(db.Entry(cls).Collection(v => v.Student).IsLoaded);
    }
    复制代码

    追踪SQL语句

    说明:此处执行了2条SQL,先查询班级 再查询该班级学生

    加载集合使用Collection方法,Entry的参数为单个实体

    执行结果:

    加载关联表单个实体

    复制代码
    //显示加载
    Console.WriteLine("=========查询单个实体===========");
    using (var db = new Entities())
    {
        var student = db.Student.First();
        db.Entry(student).Reference(v => v.Classes).Load();//加载单个实体使用Reference方法
        Console.WriteLine(student.StudentName);
        Console.WriteLine(student.Classes.ClassName);
    }
    复制代码

    追踪SQL语句

    说明:此处执行2条SQL,先查询第一个学生 top (1),再查询该学生班级。

    说明:显式加载不需要标记为virtual

    按需加载 只查询部分字段

    复制代码
    //按需查询
    using (var db = new Entities())
    {
        var query = from v in db.Student
                    select new 
                    {
                        id=v.StudentID,
                        name=v.StudentName 
                    };
        foreach (var st in query)
        {
            ObjectDumper.Write(st);
        }
    }
    复制代码

    追踪SQL语句:

    说明:生成的SQL语句只查询了 StudentID 和 StudentName 两个字段。

  • 相关阅读:
    其实吧
    一个很SB的方法,来开始调一个刚启动就SB的程序
    今天真的很SB
    32位程序关闭路径重定向
    WinDbg神断点
    SQLMap用户手册【超详细】

    真有敢干的
    21.递归
    16.数字大小升降排序编写
  • 原文地址:https://www.cnblogs.com/wfy680/p/11969416.html
Copyright © 2011-2022 走看看