2017-03-07 107 views
4

我目前正在努力將我們的公司框架從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有何不同?我嘗試了幾種不同的修復方法,並在幾個地方尋找解決方案,並且已經空了。

+0

當toolbarId!= -1時,MENU_MenuFolders或MENU_MenuToolbar_MenuFolders爲null嗎? –

+0

不,toolbarId == -1是我們的默認情況,toolbarId的任何正值應該「減少」可以說回來的記錄。我已經嘗試在LINQPad 4中運行相同的查詢,並且在那裏沒有問題.... –

+0

在工作場景(稱爲.NET 4.5)中使用的EF版本是什麼 - EF6或EF Core?換句話說,你是否真的改變了EF? –

回答

3

那麼,做了一點點修補它,發現問題是什麼。

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 && mtf.MenuToolbarId == toolbarId)) 
          && f.Id != 0 
          select new 
          { 
           AncestorFolderId = f.Id, 
           AncestorParentFolderId = f.ParentFolderId, 
           Id = f.Id, 
           ParentFolderId = f.ParentFolderId 
          }).ToList(); 

在或之後where條款,顯然是.NET的核心並不像三元運算符。希望這可以幫助任何可能遇到此問題的人。

+1

* EF Core不喜歡三元運算符* - LOL。這只是當前EF核心錯誤中的一個。 –

+2

星期一早上我一直在這....感謝EF核心!大聲笑 –

相關問題