クエリを実行するときに含める3つのモデルがあります。
これがシナリオです。
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; }
}
このようにSaleNotesを熱心に読み込むことができます...
_dbContext.Sale.Include(s => s.SaleNotes);
ただし、ThenIncludeを使用してSaleNoteからUserモデルを積極的にロードしようとするのは、コレクションであるため困難です。このシナリオを熱心にロードする方法の例は見つかりません。誰かが次のThenIncludeに含まれるコードを提供して、コレクション内の各アイテムのユーザーをロードできますか。
_dbContext.Sale.Include(s => s.SaleNotes).ThenInclude(...);
SaleNotes
がコレクションナビゲーションプロパティであることは関係ありません。参照とコレクションに対して同じように動作するはずです:
_dbContext.Sale.Include(s => s.SaleNotes).ThenInclude(sn=>sn.User);
しかし、私が知る限り、EF7はSelect拡張メソッドを使用した古いマルチレベルのインクルード構文もサポートしています。
_dbContext.Sale.Include(s => s.SaleNotes.Select(sn=>sn.User));
参考のため、EF Core(1.1.0)の最新リリースでは、このシナリオの明示的な読み込みもサポートしています。このようなもの...
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();
}