采用 lambda 的 DbQuery.Include()的重载到哪里去了?

我刚刚为一个使用 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 中了吗?

(我知道我可以为自己编写一个扩展方法来实现这一点,所以您不必这样做。我只是想知道我是否遗漏了什么。)

12256 次浏览
using System.Data.Entity;

它在 EF v4.1及以上版本中,但是您需要一个引用,因为它是一个扩展方法。


编辑 < em > (感谢@EastonJamesHarvey)

如果使用 EF Core,导入应该是:

using Microsoft.EntityFrameworkCore;