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

时间:2018-08-13 13:22:05

标签: c# automapper asp.net-core-webapi odata-v4 ef-core-2.1

我遇到了一个困扰了几天的奇怪问题。

我有一个项目,我在其中使用OData访问实体集,这些实体集是由Automapper从Ent​​ity Framework实体映射的DTO。所有这些都在ASP.NET Core Web API项目中。

我有一个引起问题的特定设置。

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

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

  • 我使用OData的<object>进行查询。

  • 这将导致空引用异常。

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

最简单的形式是这里的问题-https://github.com/nickspiers/efcore-issue

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

1 个答案:

答案 0 :(得分:2)

是的,现在转到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,但可以使用Entity Framework。

6.2可能很旧,可能“没有那么多花哨”-但它在LINQ端的错误更少,实际上可以在这种情况下使用。

这是核心问题,而不是OData问题-LINQ有效。这完全是EF Core产品问题,已在翻译/提供商站点上发布了与GLARING问题有关的问题,这些问题都没有得到任何妥善处理,但似乎积压了3.0

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

我使用第二部分(检查是否存在某些构造)来检查是否直接返回IQUeryable,还是先执行ToList(这会导致内存处理效率低下,但是有些事情需要它)。