我想在执行查询时包含三个模型。
以下是该方案。
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来加载集合中每个项目的用户。
_dbContext.Sale.Include(s => s.SaleNotes).ThenInclude(...);
答案 0 :(得分:34)
SaleNotes
是集合导航属性并不重要。它应该对引用和集合起作用:
_dbContext.Sale.Include(s => s.SaleNotes).ThenInclude(sn=>sn.User);
但据我所知,EF7还使用Select扩展方法支持旧的多级Include语法:
_dbContext.Sale.Include(s => s.SaleNotes.Select(sn=>sn.User));
答案 1 :(得分:4)
作为参考,最新版本的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();
}