DbQuery.Include()的重载去哪里需要一个lambda?
我刚刚为一个使用EntityFramework的新项目声明了一些代码优先模型。
public class BlogEntry { public long Id { get; set; } public long AuthorId { get; set; } public DateTime PublishedStamp { get; set; } public string Title { get; set; } public string Text { get; set; } public virtual User Author { get; set; } } public class User { public long Id { get; set; } public string Email { get; set; } // ... } class BlogDb : DbContext { public DbSet<BlogEntry> Entries { get; set; } public DbSet<User> Users { get; set; } }
现在假设我想检索10个最近的博客条目:
var entries = new BlogDb().Entries.OrderByDescending(...).Take(10).ToList();
现在的问题是访问entry.Author
会导致另一个数据库查询。 对于每个博客条目,您都不需要单独的此类查询。 现在,我的理解是, Include
的目的正是这种情况,所以我可以说:
var entries = new BlogDb().Entries.Include(e => e.Author).(...).ToList();
但是,这种方法似乎并不存在。 只有一个Include(string)
,像这样:
var entries = new BlogDb().Entries.Include("Author").(...).ToList();
但是这很烦人,因为它没有编译时检查,并且会被重命名重构遗漏。 当然,与lambda的版本是“正确”的方法。
那个方法去了哪里? 它是否不再包含在EntityFramework中?
(我知道我可以为自己写一个扩展方法来实现这一点,所以你不需要,我只想知道我是否错过了一些东西。)
using System.Data.Entity;//ftw
它在EF v4.1及以上版本,但你需要一个参考,因为它是一个扩展方法。
编辑 (感谢@EastonJamesHarvey)
如果使用EF Core ,导入应该是:
using Microsoft.EntityFrameworkCore;