Код EF Core 2.0 Первая ошибка в запросе (DetachedLazyLoadingWarning) - PullRequest
0 голосов
/ 29 ноября 2018

У меня есть следующий запрос в моем приложении:

var Company = Db.Company.SingleOrDefault(si => si.Guid == companyId);
var items = Db.Programs.Where(w => w.SubCompanyId == Company.CompanyId)
    .GroupBy(g => g.Projects).Include(i => i.Key.ProjectLeader);
if (skip.HasValue && take.HasValue)
{
    items = items.OrderByDescending(o => o.Key.DatumAanmaak).Skip(skip.Value).Take(take.Value);
}

var materialized = items.ToList();
return materialized.Select(s => new Models.Project()
{
    Guid = s.Key.Guid,
    ProjectId = s.Key.Id,
    Title = s.Key.Titel,
    CompanyId= s.Key.CompanyId,
    ProjectLeaderFk = s.Key.ProjectLeaderId,
    ProjectLeaderName = s.Key.ProjectLeader.FullName,
    IsIncoming = s.Key.IsIncoming ?? true,
    ProgramCount = s.Count(w => w.TargetCompanyId == Company.CompanyId),
    ApplicationAmount = s.Where(w => w.TargetCompanyId == Company.CompanyId).Sum(su => su.ApplicationAmount ),
    AvailableAmount = s.Where(w => w.TargetCompanyId == Company.CompanyId).Sum(su => su.AvailableAmount)
}).ToList();

Так как мой проект сначала код, это выдает следующую ошибку:

System.InvalidOperationException: 'Ошибка сгенерированадля предупреждения «Microsoft.EntityFrameworkCore.Infrastructure.DetachedLazyLoadingWarning: была предпринята попытка лениво загрузить свойство навигации ProjectLeider для отдельного объекта типа« ProjectProxy ».Ленивая загрузка не поддерживается для отдельных объектов или объектов, которые загружены с помощью «AsNoTracking ()».Это исключение можно подавить или зарегистрировать, передав идентификатор события «CoreEventId.DetachedLazyLoadingWarning» методу «ConfigureWarnings» в «DbContext.OnConfiguring» или «AddDbContext». '

Что именно вызывает эту ошибку?Я не использую AsNoTracking, и я включил эту таблицу, которая вызывает ошибку в запросе.Какой самый простой способ решить эту проблему?

Ответы [ 2 ]

0 голосов
/ 29 ноября 2018

Для меня это решили: (используя ThenInclude вместо Include)

var items = Dbc.SubSubsidieProgrammas.Include(i => i.Project).ThenInclude(i => i.ProjectLeider).Where(w => w.TargetCompanyId == bedrijf.BedrijfPk).GroupBy(g => g.Project);
0 голосов
/ 29 ноября 2018

Что именно вызывает эту ошибку?Я не использую AsNoTracking, и я включил эту таблицу, которая вызывает ошибку в запросе.

Ваш запрос попадает в категорию Игнорируется Включает категорию:

Если изменить запрос так, чтобы он больше не возвращал экземпляры типа сущности, с которого начинался запрос, то операторы включения игнорируются.

Оператор GroupBy меняет тип сущностизапрос начинался с (Program) чего-то другого, поэтому .Include(i => i.Key.ProjectLeader) не имеет никакого эффекта (игнорируется).

Вероятно, самый простой способ решить его - удалить материализацию и проект (Select)непосредственно из источника с запросом (items), например

//var materialized = items.ToList();
return items.Select(s => new Models.Project() { ... }).ToList();
...