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