Entity Framework Core Eager Loading Then Include on a collection

Allen Rufolo picture Allen Rufolo · Jun 27, 2016 · Viewed 27.3k times · Source

I have three Models that I want to include when performing a query.

Here is the scenario.

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; }
}

I can eager load the SaleNotes like this...

_dbContext.Sale.Include(s => s.SaleNotes);

However, trying to eager load the User model from the SaleNote using ThenInclude is challenging because it is a collection. I cannot find any examples on how to eager load this scenario. Can someone supply the code the goes in the following ThenInclude to load the User for each item in the collection.

_dbContext.Sale.Include(s => s.SaleNotes).ThenInclude(...);

Answer

octavioccl picture octavioccl · Jun 27, 2016

It doesn't matter that SaleNotes is collection navigation property. It should work the same for references and collections:

_dbContext.Sale.Include(s => s.SaleNotes).ThenInclude(sn=>sn.User);

But as far I know, EF7 also supports the old multi-level Include syntax using Select extension method:

_dbContext.Sale.Include(s => s.SaleNotes.Select(sn=>sn.User));