实体框架核心渴望加载然后包含在集合中

时间:2016-06-27 00:37:31

标签: c# entity-framework entity-framework-core

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

以下是该方案。

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(...);

2 个答案:

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