Куда делась перегрузка 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();
но это раздражает, потому что это не проверено во время компиляции и будет пропущено рефакторингом переименования. Конечно, версия с лямбда - это «правильный» подход.
Куда делся этот метод? Это больше не включено в EntityFramework?
(Я знаю, что могу написать метод расширения для себя, чтобы достичь этого, поэтому вам не нужно. Я просто хотел бы знать, что я что-то упустил.)