2017-03-07 14 views
4

現在、EFコアからEFコアに変換する企業フレームワークをEFコアに変換しようとしています。私は少しブロックに入った。.NETコアで例外を引き起こすエンティティへのLINQ、 "値はnullではありません"

Value cannot be null. Parameter name: left 
:以下の例外メッセージのコード結果の行を実行しようと

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(); 

:EF6にだけ正常に動作EF「ストアドプロシージャが」今EFコア内のコードブロックに失敗しています

.NETコアソリューションでは、このコードの場合、入力パラメータtoolbarIdが-1に設定されていると機能します。だから私の推測では、問題はOR節の反対側のどこかにあります。それが私が立ち往生している場所です。私は誰もが以前この問題を見て、それを修正する方法を知っているのだろうかと思っていた? EFコアとEF6との違いは?私はいくつかの異なる修正を試み、解決策をいくつかの場所で調べ、空になった。

+0

toolbarId!= -1の場合、MENU_MenuFoldersまたはMENU_MenuToolbar_MenuFoldersはnullですか? –

+0

いいえ、toolbarId == -1がデフォルトの場合です。toolbarIdの値が正の場合は、返されたレコードを「弱める」べきです。私はLINQPad 4で同じクエリを実行しようとしましたが、そこに問題はありません.... –

+0

作業シナリオ(.NET 4.5と呼ぶもの) - EF6またはEFコアで使用されたEFバージョンは何ですか?つまり、実際にEFを変更していますか? –

答えて

3

もう少し詳しく調べて、問題点を見つけました。 OR後where句で

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(); 

、明らかに.NETのコアは、三項演算子が好きではありません。これは、この問題に遭遇する可能性のある他の人に役立ちます。

+1

* EFコアは三項演算子* -LOLを好まない。これは現在のEFコアバグのうちの1つです(多くのうちの1つ)。 –

+2

私は月曜日の朝からこれに行っていました....ありがとうEFコア!笑 –

関連する問題