我想在执行查询时包含三个模型。
场景如下。
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();
}