【问题标题】:Entity Framework Core Eager Loading Then Include on a collectionEntity Framework Core Eager Loading 然后包含在集合中
【发布时间】:2016-10-28 21:45:08
【问题描述】:

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

这里是场景。

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 中的代码来为集合中的每个项目加载用户。

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

【问题讨论】:

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


    【解决方案1】:

    SaleNotes 是集合导航属性并不重要。它应该对引用和集合起作用:

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

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

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

    【讨论】:

    • 感谢您的回答。我实际上发现虽然用户没有出现在智能感知中,但我添加了 sn.User,构建了我的解决方案,它运行了!智能感知将 lambda 表达式中的 SaleNotes“sn”视为一个集合,因此它没有显示 User 类的各个属性。
    • @AllenRufolo 有两个重载,一个为您提供整个列表(第一个和默认值),另一个为您提供列表中的每个项目(第二个) - 所以,如果你只是在智能感知中执行“向下箭头”,您将看到预期的智能感知选项。我自己也有同样的困惑:-)
    • 艾伦,你是绝对正确的。我在 VS 2017 15.4 上使用 EF Core 2.0 并且 intelliesense 无法正常工作,但如果您只输入所需的属性名称,就可以了。这帮了我很多忙。
    • @AllenRufolo 感谢您对未在智能感知中显示的评论。这是疯狂的错误!你为我节省了很多精力!我永远不会猜到智能感知在这里可能不起作用。
    • @AllenRufolo 我希望他们能做到。我今天提交了一个错误。这是讨厌的一个:)。
    【解决方案2】:

    作为参考,最新版本(发布时)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();
    }
    

    【讨论】:

      猜你喜欢
      • 2018-04-07
      • 2016-08-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多