EF Core 二级 ThenInclude 失误
Posted
技术标签:
【中文标题】EF Core 二级 ThenInclude 失误【英文标题】:EF Core Second level ThenInclude missworks 【发布时间】:2018-01-21 08:11:44 【问题描述】:假设首先拥有这些模型:
Method
有一个 OriginalCode
OriginalCode
有很多 Mutant
s
Mutant
有很多 ParseSubTree
s
现在在Method
上查询时,我希望加载另一个。所以我有以下内容:
Method targetMethod = dBContext.Methods
.Include(me => me.OriginalCode)
.ThenInclude(oc => oc.Mutants)
.FirstOrDefault(me => me.Id == id);
下一步是另外包含ParseSubTree
。但问题是我无法访问它。见下图:
问题是“mu 是一个列表而不是一个对象引用”!
我的错在哪里!
TG。
【问题讨论】:
【参考方案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 行。
【讨论】:
以上是关于EF Core 二级 ThenInclude 失误的主要内容,如果未能解决你的问题,请参考以下文章
如何在 EF Core 中调用 ThenInclude 两次?
如何在 .net core ef 上应用 thenInclude 条件?
Entity Framework Core 如何在不使用 Include().ThenInclude() 的情况下从模型中列出一对多从多对多