Я использую Lazy Loading для EF Core 2.2.3 с прокси, который хорошо работает с DbSets.Теперь я должен загрузить данные из SQL View и использую DbQuery для этого.При попытке загрузить связанные данные для сущности, используемой в запросе, я получаю DetachedLazyLoadingWarning:
Ошибка, сгенерированная для предупреждения 'Microsoft.EntityFrameworkCore.Infrastructure.DetachedLazyLoadingWarning: была предпринята попытка lazy-загрузить свойство навигации ProjectStatus на отдельную сущность типа ProjectProxy.Ленивая загрузка не поддерживается для отдельных объектов или объектов, которые загружены с помощью «AsNoTracking ()».Это исключение можно подавить или зарегистрировать, передав идентификатор события «CoreEventId.DetachedLazyLoadingWarning» методу «ConfigureWarnings» в «DbContext.OnConfiguring» или «AddDbContext».
Я не использую AsNoTracking ()где-нибудь в моем коде.
DbQuery определен в OnModelCreating
контекста.Выдержка:
modelBuilder.Query<ProjectView>()
.ToQuery(() => Projects
.Select(p => new ProjectView()
{
Id = p.Id,
ProjectCategory = p.ProjectCategory,
ProjectPhase = p.ProjectStatus.ProjectPhase,
}));
Projects
является DbSet контекста.Project.ProjectCategory
- это свойство notMapped-Readonly-, которое использует отношение Project.ProjectStatus
.
Свойства контекста:
public virtual DbSet<Project> Projects { get; set; }
public virtual DbSet<ProjectStatus> ProjectStatus { get; set; }
public virtual DbQuery<ProjectView> ProjectViews { get; set; }
Выдержка из классов:
public partial class Project
{
[NotMapped]
public string ProjectCategory
{
get
{
if (this.ProjectStatus == null)
return string.Empty;
var foo = "someweiredcalculations";
return foo
}
}
public virtual ProjectStatus ProjectStatus { get; set; }
public int ProjectStatusId { get; set; }
public int Id { get; set; }
}
public class ProjectView
{
public int Id { get; set; }
public string ProjectCategory { get; set; }
public string ProjectPhase { get; set; }
}
public partial class ProjectStatus : BaseEntity, IIdEntity<int>
{
public int Id { get; set; }
public string ProjectPhase { get; set; }
public virtual ICollection<Project> Projects { get; set; } = new HashSet<Project>();
}
Как я могу заставить Lazy Loading работать для этого DbQuery?
Большое спасибо.