В Entity Framework Core 2.1 введена ленивая загрузка.Требуется, чтобы все свойства навигации были виртуальными, как объяснено в проблеме Ленивая загрузка прокси: позволяют указывать типы / навигационные объекты :
В настоящее время, когдаиспользуются прокси с отложенной загрузкой, каждый тип сущности в модели должен быть подходящим для прокси, и все переходы должны быть виртуальными.Эта проблема связана с тем, что некоторые типы / навигационные объекты могут быть загружены лениво, а другие нет.
Проблема по-прежнему открыта и не имеет разрешения, поэтому желаемый сценарий по-прежнему не поддерживается.
И, как говорит исключение:
UseLazyLoadingProxies требует, чтобы все типы сущностей были открытыми, незапечатанными, имели свойства виртуальной навигации и имели открытый или защищенный конструктор.
Итак, измените все свойства навигации (то есть свойства, относящиеся к другим объектам) на virtual
.
Или используйте ILazyLoader
, как описано в Ленивая загрузка без прокси :
public class Blog
{
private ICollection<Post> _posts;
public Blog()
{
}
private Blog(ILazyLoader lazyLoader)
{
LazyLoader = lazyLoader;
}
private ILazyLoader LazyLoader { get; set; }
public int Id { get; set; }
public string Name { get; set; }
public ICollection<Post> Posts
{
get => LazyLoader?.Load(this, ref _posts);
set => _posts = value;
}
}