实体框架急切加载然后包含在集合中

问题描述 投票:30回答:2

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

这里是场景。

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(...);
c# entity-framework entity-framework-core
2个回答
45
投票

SaleNotes并不是集合导航属性。对于引用和集合,它应该工作相同:

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

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

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

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();
}
© www.soinside.com 2019 - 2024. All rights reserved.