Je viens de déclarer des modèles "code-first" pour un nouveau projet qui utilise 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; }
}
Supposons maintenant que je veuille récupérer les 10 entrées de blog les plus récentes :
var entries = new BlogDb().Entries.OrderByDescending(...).Take(10).ToList();
Le problème maintenant est que l'accès entry.Author
entraînera une autre interrogation de la base de données. Vous ne voudriez pas qu'une telle requête soit effectuée pour chaque entrée du blog. Si j'ai bien compris, l'objectif de la fonction Include
est exactement ce cas, donc je peux dire :
var entries = new BlogDb().Entries.Include(e => e.Author).(...).ToList();
Cependant, cette méthode ne semble pas exister. Il existe seulement une Include(string)
comme ceci :
var entries = new BlogDb().Entries.Include("Author").(...).ToList();
mais c'est ennuyeux parce qu'il n'est pas vérifié à la compilation et qu'il ne sera pas pris en compte par le remaniement des noms. La version avec le lambda est certainement l'approche "correcte".
Où est passée cette méthode ? N'est-elle plus incluse dans EntityFramework ?
(Je sais que je peux écrire une méthode d'extension pour moi-même pour y parvenir, donc vous n'avez pas à le faire. J'aimerais simplement savoir si quelque chose m'échappe).