【问题标题】:EF Core Second level ThenInclude missworksEF Core 二级 ThenInclude 失误
【发布时间】:2018-01-21 08:11:44
【问题描述】:

假设首先拥有这些模型:

Method 有一个 OriginalCode OriginalCode 有很多 Mutants Mutant 有很多 ParseSubTrees

现在在Method 上查询时,我希望加载另一个。所以我有以下内容:

Method targetMethod = dBContext.Methods
            .Include(me => me.OriginalCode)
                .ThenInclude(oc => oc.Mutants)
            .FirstOrDefault(me => me.Id == id);

下一步是另外包含ParseSubTree。但问题是我无法访问它。见下图:

问题是“mu 是一个列表而不是一个对象引用”!

我的错在哪里!

TG。

【问题讨论】:

    标签: entity-framework include .net-core entity-framework-core


    【解决方案1】:

    这是集合类型导航属性的 ThenInclude 重载的已知 Intellisense 问题,由 Completion missing members of lambda parameter in fault tolerance case #8237 Roslyn GitHub 问题跟踪。

    在它得到修复之前,只需键入属性的名称,它就会成功编译并按预期工作。

    .ThenInclude(mu => mu.ParseSubTrees) 
    

    更新:现在它甚至在 EF Core 文档的Including multiple levels 部分中特别提到:

    注意

    当前版本的 Visual Studio 提供不正确的代码完成选项,当在集合导航属性后使用 ThenInclude 方法时,可能会导致正确的表达式被标记为语法错误。这是在 https://github.com/dotnet/roslyn/issues/8237 跟踪的 IntelliSense 错误的症状。只要代码正确且能够编译成功,忽略这些虚假语法错误是安全的。

    【讨论】:

    • 2019 年仍未修复... :-( 感谢您节省我的时间,先生!:-)
    • @WoIIe 里程碑:积压。这意味着甚至没有计划修复:-(
    • 今天来到这里寻找这颗宝石。 2019 年 16.3.9 仍未修复。
    • 2020 并没有修复,但显然已在 VS16.5 中修复,该版本目前处于预发布状态。我花了几个小时说服 DbContext 是错误的……我想我已经完全依赖智能感知了。哦,看起来他们已将其 关闭 EF Core doco 的“包括多个级别”部分,这可以节省我几个小时。
    【解决方案2】:

    在我的例子中,命名空间 System.Data.Entity 和 Microsoft.EntityFrameworkCore 之间存在冲突。只需删除第一个 using 行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-10-01
      • 1970-01-01
      • 2020-08-24
      • 2021-04-21
      • 1970-01-01
      • 2018-11-26
      相关资源
      最近更新 更多