代码之家  ›  专栏  ›  技术社区  ›  Nick Spiers

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

  •  2
  • Nick Spiers  · 技术社区  · 6 年前

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

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

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

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

    • /api/Foos$expand=man($expand=chu)

    • 这将导致空引用异常。

    全部输出来自ASP.NET核心Web服务器位于此处- https://gist.github.com/nickspiers/3620840145d0a88e3966643613a5d442

    以最简单的形式重新讨论这个问题- https://github.com/nickspiers/efcore-issue

    我试着把每件事都归结为最简单的部分,但是如果我忘记了更多的信息,请告诉我我还能提供什么。谢谢!

    1 回复  |  直到 6 年前
        1
  •  2
  •   TomTom    6 年前

    是的,现在去Odata和Entity Framework的核心github站点看看吧。

    官方的立场是这一切都在3.0条时间框架-你可以使用2019年夏天。别开玩笑了。在那之前,所有的LINQ问题背面2.1-不重要。2.2款-小小的释放,不辛苦的工作。祝你等待愉快。

    我在这里展开讨论:

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

    答案包括:

    查询缺少测试覆盖率。我们正在研究一些 但这不是一件小事,而且会占用资源 从添加功能或修复错误——一个原因2.2款是一个较小的 释放。其中一部分将使人们更容易提交 测验。

    显然,使用OData会导致某些查询模式 比编写查询时更常见

    OData WebApi也有一个公开的问题。

    目前唯一可行的解决办法可能是:

    • 将项目类型更改为net472
    • 使用Asp.net等等,不在dotnet核心

    6.2条可能已经很老了,可能“没有所有的铃铛和口哨声”,但它在LINQ方面的bug要少得多,而且在这个场景中实际上是可用的。

    这是核心而不是OData问题—LINQ是有效的。这完全是一个英孚核心产品的问题,在翻译/提供商网站上发布时出现了明显的问题,这些问题都没有经过任何优先级的处理,但似乎被积压了3.0条

    现在,在你的特殊情况下-你做一个项目,对吗?给你带上包裹?英孚核心有其他问题。是的,不是开玩笑。但是在publich中有代码可以提取所需的include,您可以使用它。您肯定需要提取include,然后在ProjectTo中使用它们。

    推荐文章