【问题标题】:EFCore Include without navigation property没有导航属性的 EFCore 包含
【发布时间】:2019-02-08 18:06:34
【问题描述】:

如何在没有导航属性的情况下进行包含?
我可以使用导航属性来获取子类别,但之后我需要获取这些子类别的所有成分(并且由于聚合根边界,我没有成分的导航属性)。而且我不知道如何才能得到它们。

代码

var cat = _context.Categories.Include(s => s.SubCategories).ToList();

【问题讨论】:

  • Include is 用于导航属性。你的问题没有意义。另外,Stack Overflow 不接受代码截图
  • 请重新表述您的问题,以便我们有机会了解您的问题并尽力帮助您。

标签: c# entity-framework-core


【解决方案1】:

据我所知,您不能,不能使用 Include。为此,您需要使用链接键作为子句来使用单独的请求/查询。

但是如果你需要以这种方式引用它,为什么不把它设为导航属性呢?这正是他们的目的。

所以,如果您有一个类别 ID,那么这就是您循环浏览成分的方式。您应该能够从这里开始工作以到达您需要去的地方:

var catId = 999;
foreach(var subCat in _context.SubCategories.Where(u => u.CategoryId == catId))
{
    foreach(var ingredient in _context.Ingredients.Where(u => u.SubCategoryId == subCat.Id))
    {
        // do work on 'ingredient'
    }
}

【讨论】:

  • " 为此,您需要使用链接键作为子句使用单独的请求/查询"为什么可以使用 join 时单独查询?
  • @CamiloTerevinto 这是一个更好的选择。
  • 由于 DDD 模式,我没有导航属性。我如何使用链接查询来获取它?
  • DDD?我不熟悉那种模式......你会做类似 _context.SubCategories.Where(u => u.CategoryId == cat.Id).ToList()
  • 同理。基本上,对于每个 SubCategory,_context.Ingredients.Where(u => u.SubCategoryId == subCat.Id).ToList() 肯定有更有效的方法。
猜你喜欢
  • 2020-05-23
  • 1970-01-01
  • 2015-12-23
  • 1970-01-01
  • 1970-01-01
  • 2020-09-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多