码迷,mamicode.com
首页 > 其他好文 > 详细

【EF学习笔记08】----------加载关联表的数据 显式加载

时间:2016-08-09 13:33:43      阅读:95      评论:0      收藏:0      [点我收藏+]

标签:

显式加载

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

技术分享

加载从表集合类型

//显示加载
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 两个字段。

技术分享

 

【EF学习笔记08】----------加载关联表的数据 显式加载

标签:

原文地址:http://www.cnblogs.com/gosky/p/5752733.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!