EF 延迟加载


1.立即查询
//var list = context.Books.Where(b => b.BookID > 3).ToList();

区分开:集合中的where是System.Linq.Enumerable里给IEnumerable接口添加的扩展方法
而context.Books.Where 来自于System.Linq.Queryable中的IQueryable扩展的方法
//List<string> strs = new List<string>();

//strs.Where(b=>true);

//2.延迟加载 的本质是在System.Linq.Queryable类中为IQueryable添加扩展方法而实现的
// 延迟加载的本质原因:当前可能通过多个标准查询条件 那么每个方法都只是添加一个查询条件而已,无法确定本次查询条件
// 是否已经添加完毕,因此, 没有办法在每个查询条件后的sql语句是什么,只能返回一个包含了所有查询条件的DBQuery对象
// 当使用这个DBQuery对象的时候,才能根据所有的条件生成sql语句,此时再查询数据库
System.Data.Entity.Infrastructure.DbQuery<Book> list2 = context.Books.Where(b => b.BookName == "mnvc")
.OrderBy(b=>b.BookName)
as System.Data.Entity.Infrastructure.DbQuery<Book>;

//2.延迟加载--针对外键实体的延迟
// 本质:对于外键属性而言,EF会在用到这个外键属性的时候才执行插叙查询语句
//var user = context.Users.Where(u => u.UserId == 5);//此时返回的是DBQuery对象,以接口的形式返回

//var ousr = user.FirstOrDefault();//此时只是查询的user表中的数据

//var article = ousr.Articles.FirstOrDefault().Name;//此时只是查询article表中的数据


//3.延迟加载的缺点:每次使用外键属性的时候,都会查询数据库
//var user = context.Users.Where(u => true);
//foreach (var item in user)
//{
// Console.WriteLine("用户:"+item.Name+" "+item.Articles.FirstOrDefault().Name);
//}

//此时应该是用连接查询
var user = context.Users.Include("Articles");
//通过include方法,可以告诉EF 连接查询 哪个外键属性,就是生成一条查询数据
//备注:可以使用多个include属性
foreach (var item in user)
{
Console.WriteLine("用户:" + item.Name + " " + item.Articles.FirstOrDefault().Name);
}

转载于:https://www.cnblogs.com/never-giveUp/p/4006425.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值