执行查询时,我想包含三个模型。
这里是场景。
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中加载用户模型非常具有挑战性,因为它是一个集合。我找不到任何有关如何急于加载此方案的示例。有人可以在下面的ThenInclude中提供代码吗,以便为集合中的每个项目加载User。
_dbContext.Sale.Include(s => s.SaleNotes).ThenInclude(...);
SaleNotes
并不是集合导航属性。对于引用和集合,它应该工作相同:
_dbContext.Sale.Include(s => s.SaleNotes).ThenInclude(sn=>sn.User);
但是据我所知,EF7还使用Select扩展方法支持旧的多级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();
}