2017-03-07 1 views
4

Ich arbeite gerade an dem Versuch, unser Unternehmensframework von EF6 in EF Core umzuwandeln. Ich bin in einen Block gerannt. Ein EF "Stored Procedure", die gerade fein auf EF6 arbeitet nun an diesem Code-Block in EF Core-Fehler:LINQ zu Entitäten, die in .NET Core eine Ausnahme verursachen, "Wert kann nicht null sein"

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

Der Versuch, diese Codezeile ergibt folgende Ausnahmemeldung auszuführen:

Value cannot be null. Parameter name: left 

In unserer .NET Core-Lösung funktioniert dieser Code DOES, wenn der Eingabeparameter toolbarId auf -1 festgelegt ist. Meine Vermutung ist, dass das Problem irgendwo auf der anderen Seite der OR-Klausel liegt. Und da stecke ich fest. Ich habe mich gefragt, ob jemand dieses Problem schon einmal gesehen hat und weiß, wie man es beheben kann? Oder wie unterscheidet sich EF Core von EF6? Ich habe mehrere verschiedene Fixes ausprobiert und an mehreren Stellen nach einer Lösung gesucht und bin leer ausgegangen.

+0

Sind entweder MENU_MenuFolders oder MENU_MenuToolbar_MenuFolders null, wenn toolbarId! = -1? –

+0

Nein, toolbarId == -1 ist unser Standardfall. Jeder positive Wert für toolbarId sollte die sozusagen zurückgegebenen Datensätze "abschneiden". Ich habe versucht, die gleiche Abfrage in LINQPad 4 ausführen und habe keine Probleme dort .... –

+0

Was war die EF-Version im Arbeitsszenario (was nennen Sie .NET 4.5) - EF6 oder EF Core? Mit anderen Worten, ändern Sie tatsächlich die EF? –

Antwort

3

Nun, tat ein bisschen mehr basteln damit und herausgefunden, was das Problem war.

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

In der where Klausel nach dem OR, scheinbar .NET Kern nicht wie der ternären Operator. Ich hoffe, dies hilft jedem anderen, der auf dieses Problem stoßen könnte.

+1

* EF Core mag nicht den ternären Operator * - LOL. Es ist nur eine (von vielen) aktuellen EF Core Bugs. –

+2

Ich war seit Montagmorgen dabei .... Danke EF Core! lol –

Verwandte Themen