J'ai trois modèles que je souhaite inclure lors de l'exécution d'une requête.
Voici le scénario.
public class Sale
{
public int Id { get; set; }
public List<SaleNote> SaleNotes { get; set; }
}
public class SaleNote
{
public int Id { get; set; }
public User User { get; set; }
}
public class User
{
public int Id { get; set; }
}
Je peux charger les SaleNotes comme ça ...
_dbContext.Sale.Include(s => s.SaleNotes);
Cependant, essayer de charger le modèle User à partir de SaleNote à l'aide de ThenInclude est difficile car il s'agit d'une collection. Je ne trouve aucun exemple sur la façon de charger ce scénario avec impatience. Quelqu'un peut-il fournir le code dans le ThenInclude suivant pour charger l'utilisateur pour chaque élément de la collection.
_dbContext.Sale.Include(s => s.SaleNotes).ThenInclude(...);
Peu importe que SaleNotes
soit la propriété de navigation de la collection. Cela devrait fonctionner de la même manière pour les références et les collections:
_dbContext.Sale.Include(s => s.SaleNotes).ThenInclude(sn=>sn.User);
Mais pour autant que je sache, EF7 prend également en charge l'ancienne syntaxe d'inclusion à plusieurs niveaux à l'aide de la méthode d'extension Select:
_dbContext.Sale.Include(s => s.SaleNotes.Select(sn=>sn.User));
Pour référence, la dernière version d'EF Core (1.1.0) prend également en charge le chargement explicite pour ce scénario. Quelque chose comme ça...
using (var _dbContext = new DbContext())
{
var sale = _dbContext.Sale
.Single(s => s.Id == 1);
_dbContext.Entry(sale)
.Collection(n => n.SalesNotes)
.Load();
_dbContext.Entry(sale)
.Reference(u => u.User)
.Load();
}