实体框架核心急切加载然后包含在集合上



我想在执行查询时包含三个模型。

场景如下。

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中提供代码来加载集合中每个项目的User ?

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

SaleNotes是否为集合导航属性无关紧要。对于引用和集合应该是一样的:

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

但是据我所知,EF7还支持旧的多级Include语法,使用选择扩展方法:

_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();
}

最新更新