Linq działający w Entity Framework 6 nie działa w .Net5

0

Mam problem z zapytaniem, które nie działa w .Net5 Nie jestem pewien, dlaczego zapytanie, które działa dobrze w Entity Framework 6, nie otrzymuje listy standardów w .Net5. Co mogę zmienić żeby zoptymalizować zapytanie?

var listModel =
               (
               from dane in _dbContext.Standard
               join kraj in _dbContext.CountryStandard
               on dane.IdCountryStandard equals kraj.IdCountryStandard
               join opcja in _dbContext.MeasureDiameterOption
               on dane.IdStandard equals opcja.IdStandard
               join metoda in _dbContext.MeasureDiameterMethod
               on opcja.IdMeasureDiameterMethod equals metoda.IdMeasureDiameterMethod
               join sposob in _dbContext.WalkingLineRadius
               on opcja.IdWalkingLineRadius equals sposob.IdWalkingLineRadius
               
               select new StandardEnt()
               {
                   IdStandard = dane.IdStandard,
                   IdCountryStandard = dane.IdCountryStandard,
                   StandardName = dane.StandardName,
                   IsActive = dane.IsActive,
                   NameCountry = kraj.NameCountryStandard,
                   FreeHeadSpace = (double)dane.FreeHeadSpace,
                   IsTlcStandard = dane.IsTlcStandard,
                   MinLandingSize = (double)dane.MinLandingSize,
                   MinStepHeight = (double)dane.MinStepHeight,
                   MaxStepHeight = (double)dane.MaxStepHeight,
                   MinConvinience = (double)dane.MinConvinience,
                   MaxConvinience = (double)dane.MaxConvinience,
                   MaxStepDeep = (double)dane.MaxStepDeep,
                   MinStepDeep = (double)dane.MinStepDeep,
                   MaxStepWidth = (double)dane.MaxStepWidth,
                   WidthLimit = (double)dane.WidthLimit,
                   StartOverlap = (double)dane.StartOverlap,
                   InternalHandrailMaxRadius = (double)dane.InternalHandrailMaxRadius,
                   PrimaryCalcMethod = (from metody in _dbContext.MeasureDiameterOption
                                        select new MeasureDiameterMethodEnt()
                                        {
                                            IdStandard = metody.IdStandard,
                                            IdMeasureDiameterOption = metody.IdMeasureDiameterOption,
                                            Description = metody.Description,
                                            IdMeasureDiameterMethod = metody.IdMeasureDiameterMethod,
                                            IdWalkingLineRadius = metody.IdWalkingLineRadius,
                                            IdCalcMethodType = metody.WalkingLineRadius.CalcMethodType.IdCalcMethodType,
                                            IdWalkingLineMeasure = metody.WalkingLineRadius.WalkingLineMeasure.IdWalkingLineMeasure,
                                            //CalcMethod = Enum.Parse<DiamDivide>(opcja.WalkingLineRadius.CalcMethodType.CalcMethodNameType),
                                            //WalkingLineMeasure = Enum.Parse<WalkingLineMeasureMethod>(opcja.WalkingLineRadius.WalkingLineMeasure.WalkingLineMeasureName),
                                            CalcMethodName = metody.MeasureDiameterMethod.CalcMethodName,
                                            CalcMethodNameType = metody.WalkingLineRadius.CalcMethodType.CalcMethodNameType,
                                            WalkingLineMeasureName = metody.WalkingLineRadius.WalkingLineMeasure.WalkingLineMeasureName,
                                            FirstWidth = (double)metody.WalkingLineRadius.FirstWidth,
                                            SecondWidth = (double)metody.WalkingLineRadius.SecondWidth
                                        }).Where(s => s.CalcMethodName == "PrimaryCalcMethod" && s.IdStandard == dane.IdStandard).FirstOrDefault(),
                   SecondaryCalcMethod = (from metody in _dbContext.MeasureDiameterOption
                                          select new MeasureDiameterMethodEnt()
                                          {
                                              IdStandard = metody.IdStandard,
                                              IdMeasureDiameterOption = metody.IdMeasureDiameterOption,
                                              Description = metody.Description,
                                              IdMeasureDiameterMethod = metody.IdMeasureDiameterMethod,
                                              IdWalkingLineRadius = metody.IdWalkingLineRadius,
                                              IdCalcMethodType = metody.WalkingLineRadius.CalcMethodType.IdCalcMethodType,
                                              IdWalkingLineMeasure = metody.WalkingLineRadius.WalkingLineMeasure.IdWalkingLineMeasure,
                                              //CalcMethod = Enum.Parse<DiamDivide>(opcja.WalkingLineRadius.CalcMethodType.CalcMethodNameType),
                                              //WalkingLineMeasure = Enum.Parse<WalkingLineMeasureMethod>(opcja.WalkingLineRadius.WalkingLineMeasure.WalkingLineMeasureName),
                                              CalcMethodName = metody.MeasureDiameterMethod.CalcMethodName,
                                              CalcMethodNameType = metody.WalkingLineRadius.CalcMethodType.CalcMethodNameType,
                                              WalkingLineMeasureName = metody.WalkingLineRadius.WalkingLineMeasure.WalkingLineMeasureName,
                                              FirstWidth = (double)metody.WalkingLineRadius.FirstWidth,
                                              SecondWidth = (double)metody.WalkingLineRadius.SecondWidth
                                          }).Where(s => s.CalcMethodName == "SecondaryCalcMethod" && s.IdStandard == dane.IdStandard).FirstOrDefault()
                                          
               }
           ).GroupBy(x => x.IdStandard).Select(x => x.FirstOrDefault()).ToList();
           return  listModel;



jeśli dołożę .AsEnumerable(). to działa ale ładuje kolekcję do pamięci

 .AsEnumerable().GroupBy(x => x.IdStandard).Select(x => x.FirstOrDefault()).ToList();
0

sprawdź zapytanie jakie leci do bazy (w logach bazy albo z c#)

var sql = ((System.Data.Entity.Core.Objects.ObjectQuery)query)
            .ToTraceString();

i porównaj z tym z EF 6; będzie łatwiej namierzyć w którym miejscu się psuje

1 użytkowników online, w tym zalogowanych: 0, gości: 1