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

EF 延迟加载

时间:2014-10-05 01:08:17      阅读:423      评论:0      收藏:0      [点我收藏+]

标签:使用   ar   for   数据   art   c   on   r   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);
}

EF 延迟加载

标签:使用   ar   for   数据   art   c   on   r   ef   

原文地址:http://www.cnblogs.com/never-giveUp/p/4006425.html

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