Куда делась перегрузка DbQuery.Include (), которая принимает лямбду? - PullRequest
71 голосов
/ 25 марта 2012

Я только что объявил несколько моделей кода для нового проекта, который использует 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();

, но это раздражает, поскольку не проверяется во время компиляции и будет пропущено рефакторингом переименования.Конечно, версия с лямбда - это «правильный» подход.

Куда дел этот метод?Разве он больше не включен в EntityFramework?

(я знаю, что могу написать метод расширения для себя, чтобы достичь этого, так что вам не нужно. Я просто хотел бы знать, пропускаю ли ячто-то.)

1 Ответ

102 голосов
/ 25 марта 2012
using System.Data.Entity;

Это в EF v4.1 и выше, но вам нужна ссылка, так как это метод расширения.


Редактировать (спасибо @EastonJamesHarvey)

При использовании EF Core импорт должен быть:

using Microsoft.EntityFrameworkCore;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...