繁体   English   中英

EF Core、OData v4、Automapper - 使用嵌套 $expand 查询时出现空引用异常

[英]EF Core, OData v4, Automapper - Null reference exception when querying with nested $expand

我有一个奇怪的问题,我已经挣扎了好几天了。

我有一个项目,我使用 OData 访问实体集,这些实体集是 Automapper 从实体框架实体映射的 DTO。 这一切都在 ASP.NET Core Web API 项目中。

我有一个特定的设置,它会导致问题。

  • 具有 1:1 子级的实体,其本身具有 1:1 子级,这两种关系都是可选的。

  • 我正在查询的实体集存在,但与其他两个的关系为空。

  • 我使用 OData 的/api/Foos$expand=man($expand=chu)

  • 这会导致空引用异常。

ASP.NET Core Web Server 的完整输出位于此处 - https://gist.github.com/nickspiers/3620840145d0a88e3966643613a5d442

以最简单的形式重现该问题的方式在这里 - https://github.com/nickspiers/efcore-issue

我试图将所有内容归结为最简单的部分,但如果我忘记了更多信息,请告诉我我还能提供什么。 谢谢!

是的,现在前往 Odata 和 Entity Framework Core github 站点并感到震惊。

可悲的是,您无能为力。 错误的 TOMS - EF Core 在某些情况下几乎不可用。

官方立场是这一切都在 3.0 时间范围内得到解决 - 你很可能可以使用 2019 年夏季。不是开玩笑。 在此之前,他们遇到的所有 LINQ 问题都被推迟了。2.1 - 不重要。 2.2 - 小版本,不是硬 linq 工作。 开心等待。

同一个地方。

我在这里开了一个讨论:

https://github.com/aspnet/EntityFrameworkCore/issues/12953

答案包括:

查询缺乏测试覆盖率。 我们正在几个方面致力于此,但它的工作量并不小,并且占用了用于添加功能或修复错误的资源——2.2 版本较小的一个原因。 其中一部分将使人们更容易提交测试。

很明显,使用 OData 会导致某些查询模式比手动编写查询的情况更常见。 这使得它特别容易缺乏测试覆盖率。

OData WebApi 也有一个悬而未决的问题。

现在唯一合理的解决方法可能是:

  • 将项目类型更改为 net472
  • 使用 Asp.net 等。不在 dotnet 核心中
  • 这允许您使用现代 asp.net 但实体框架。

6.2 可能很旧,可能“没有所有的花里胡哨” - 但它在 LINQ 方面的错误少得多,并且在这种情况下实际上是可用的。

这是核心不是 OData 问题 - LINQ 是有效的。 这完全是一个 EF Core 产品问题,在翻译/提供商站点上发布时存在明显的问题,这些问题都没有得到任何优先处理,但似乎已为 3.0 积压

现在,在您的特定情况下-您执行 ProjectTo,对吗? 你把里面的东西拿走吗? Ef Core 有其他问题。 是的,不是开玩笑。 但是 publich 中有代码可以提取所需的 Includes,您可以使用它。 您肯定需要提取包含,然后在 ProjectTo 中使用它们。

我使用它和第二部分(检查某些构造是否在)检查我是否直接返回 IQUEryable,或者首先执行 ToList (然后导致内存处理 - 效率低下,但有些事情需要它)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM