解读DbContext中的三种【EagerLoad,LazyLoad,ExplicitLoading】加载模式

一:立即加载,延迟加载,显式加载

1. 立即加载

Student Domain
{
Teacher theacher
}

using (SchoolDBEntities db = new SchoolDBEntities())
{
db.Database.Log = Console.WriteLine;

db.Configuration.LazyLoadingEnabled = false;

var item = db.Students.Include("Courses").Include("StudentAddress").ToList();

}


StudentAddress Domain


当我获取Student的时候,StudentAddress是否已经加载出来????


立即加载:

有什么好处:如果一次性加载出来,可以后续从cache中读取。。。或者减少数据库的访问次数。。。。


延迟加载:增加了数据库的压力,,,只有你需要这条数据的时候我们才加载,如果数据量比较大。。。


Tree结构,树形菜单。。 【Tree】 client => server

默认情况下,我们就是延迟加载。。。

db.Configuration.LazyLoadingEnabled = false; 用来指定是否延迟加载。。。。


2. 如果关闭延迟加载??? 怎么显示加载。。。

using (SchoolDBEntities db = new SchoolDBEntities())
{
db.Database.Log = Console.WriteLine;

db.Configuration.LazyLoadingEnabled = false;

var item = db.Students.FirstOrDefault();


//现在已经关闭延迟加载了,如果手工让其加载???
db.Entry(item).Reference(s => s.StudentAddress).Load();

var address = item.StudentAddress;
}

原文地址:https://www.cnblogs.com/dragon-L/p/6545863.html