我目前正在努力将我们的公司框架从EF6转换为与EF Core兼容。我遇到了一块障碍。这只是正常的EF6的EF“存储过程”现在没有在EF核心的代码块上:LINQ to Entities在.NET Core中导致异常“Value can not be null”
var allFolderAncestors = (from f in context.MENU_MenuFolders
from mtf in context.MENU_MenuToolbar_MenuFolders
.Where(x => x.MenuFolderId == f.Id
|| x.MenuFolderId == f.ParentFolderId)
.DefaultIfEmpty()
where (toolbarId == -1
|| (mtf == null
? false
: mtf.MenuToolbarId == toolbarId)
)
&& f.Id != 0
select new
{
AncestorFolderId = f.Id,
AncestorParentFolderId = f.ParentFolderId,
Id = f.Id,
ParentFolderId = f.ParentFolderId
}).ToList();
试图执行这行代码导致以下异常消息:
Value cannot be null. Parameter name: left
在我们的.NET Core解决方案中,当输入参数toolbarId
设置为-1时,此代码DOES工作。所以我的猜测是问题出在OR子句的另一端。这就是我卡住的地方。我想知道是否有人曾经见过这个问题,并知道如何解决它?或者EF Core与EF6有何不同?我尝试了几种不同的修复方法,并在几个地方寻找解决方案,并且已经空了。
当toolbarId!= -1时,MENU_MenuFolders或MENU_MenuToolbar_MenuFolders为null吗? –
不,toolbarId == -1是我们的默认情况,toolbarId的任何正值应该“减少”可以说回来的记录。我已经尝试在LINQPad 4中运行相同的查询,并且在那里没有问题.... –
在工作场景(称为.NET 4.5)中使用的EF版本是什么 - EF6或EF Core?换句话说,你是否真的改变了EF? –