【问题标题】:Where did the overload of DbQuery.Include() go that takes a lambda?需要 lambda 的 DbQuery.Include() 的重载去了哪里?
【发布时间】:2012-03-25 00:38:04
【问题描述】:

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

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

【问题讨论】:

    标签: c# entity-framework


    【解决方案1】:
    using System.Data.Entity;
    

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


    编辑 (感谢@EastonJamesHarvey)

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

    using Microsoft.EntityFrameworkCore;
    

    【讨论】:

    • 谢谢!出于好奇,为什么这是一个扩展方法,而不仅仅是原始方法的另一个重载?
    • 我实际上不确定大声笑是否会成为 ADO.Net 团队的问题
    • 它是 IQueryable 上的扩展方法,因此您可以在 LINQ 查询中的任何位置使用它。如果它仅在 DbQuery 或类似上定义,那么一旦您使用其他方法,例如 .Where、.OrderBy 等,您将不再看到该方法,因为这些方法的返回类型是 IQueryable.
    • 我对 4.1 的引用感到困惑。请注意,您确实 NOT 需要引用 EF 4.1 才能访问所需的 Include 扩展方法。它是System.Data.Entity.QueryableExtensions 对象的一种方法,EF 6.0.2(撰写本文时的最新版本)中也提供了该方法。您只需要导入正确的命名空间即可访问它。
    • 使用 netcoreapp1.0 现在是:使用 Microsoft.EntityFrameworkCore;
    猜你喜欢
    • 1970-01-01
    • 2011-11-03
    • 1970-01-01
    • 2016-01-29
    • 2016-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-19
    相关资源
    最近更新 更多