EF Code First +延迟加载,投影不能按预期工作

时间:2012-09-12 15:47:25

标签: entity-framework ef-code-first lazy-loading projection eager-loading

我有这样的事情:

var tmp =_forumsDb.Threads
.Where(t => t.Id == variable)
.Select(t => new { Thread = t, Posts = t.Posts.Take(1) })
.Single();

现在,我希望tmp.Thread.Posts.Count();为1,但它会占用我在数据库中的所有帖子。是否可以使用显示大量帖子的投影,在单个查询中执行而不关闭延迟加载?

编辑: 我尝试过这样的事情,但它也不起作用:

var tmp =_forumsDb.Threads
.Where(t => t.Id == variable)
.Select(t => new { Thread = t, Posts = t.Posts.OrderBy(p => p.DateCreated).Take(1) })
.Select(t => t.Thread)
.Single();

1 个答案:

答案 0 :(得分:2)

tmp.Thread.Posts是为其配置延迟加载的导航属性。由于尚未加载,因此访问它会加载所有剩余的帖子。

tmp.Posts不是导航属性。这是您应该能够访问而不会触发另一个查询的那个。