エンティティフレームワークコアEagerを読み込んでコレクションに含める

c# entity-framework entity-framework-core

質問

クエリを実行するときに含める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();
}


Related

ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ