通过在较旧版本的Entity Framework中工作的Entity Framework Core执行GroupBy查询时引发NullReferenceException。

我们正在将一个旧的.NET Framework 4.6.1项目转换为.NET Core 2.2。在此过程中,我们已将Entity Framework软件包更新为Entity Framework Core,并将EntityFrameworkCore.SqlServer更新为2.2.6。不幸的是,这导致我们现有的大量查询先前成功地成功抛出了NullReferenceException

这似乎与两种版本的EF在我们的SQL Server 2017 Db平台上生成SQL的方式不同有关。

现在引发此错误的实际EF查询通常具有以下性质:

var query = from c in _workspaceContext.Container
            join ch in _workspaceContext.ContainerHierarchy on c.ContainerPk equals ch.AncestorFk
            join a in _workspaceContext.Asset on ch.ContainerFk equals a.ParentContainerFk
            join cu in _workspaceContext.ContainerUser on new { ContainerKey = ch.ContainerFk,UserKey = userKey } equals new { ContainerKey = cu.ContainerFk,UserKey = cu.UserFk } into cus
            from cu in cus.DefaultIfEmpty()
            join co in _workspaceContext.ContainerOrganisation on ch.ContainerFk equals co.ContainerFk into cos
            from co in cos.DefaultIfEmpty()
            where containerIds.Contains(c.Id) && !a.IsHidden && a.SentByUserFk == null
            select new ContainerAsset
                      {
                            TopLevelContainerId = c.Id,AssetKey = a.AssetPk,ContainerKey = ch.ContainerFk,AssetName = a.Name,CanView = (c.ContainerTypeFk == 3) 
                      };

query = query.GroupBy(x => new
                           {
                               x.TopLevelContainerId,x.ContainerKey,x.CanView
                           }).ToList();

关于这种行为为何在EF Core和EF 6之间发生了变化的任何想法?我可以通过在第二个查询中执行GroupBy之前将第一个查询的表达式加载到内存中来解决此问题,例如像这样:

   query = query.ToList().GroupBy(x => new
            {
                x.TopLevelContainerId,x.CanView
            }).ToList();

不幸的是,在每种情况下这样做都会对性能产生负面影响。

yiling3716416 回答:通过在较旧版本的Entity Framework中工作的Entity Framework Core执行GroupBy查询时引发NullReferenceException。

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3138036.html

大家都在问