获取lambda的DbQuery.Include()的重载去了哪里

本文关键字:重载 lambda DbQuery Include 获取 | 更新日期: 2023-09-27 18:29:00

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

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

获取lambda的DbQuery.Include()的重载去了哪里

using System.Data.Entity;

它在EF v4.1及更高版本中,但您需要一个参考,因为它是一个扩展方法。


编辑(感谢@EastonJamesHarvey)

如果使用EF Core,则导入应为:

using Microsoft.EntityFrameworkCore;