Что эквивалентно .Configuration.ProxyCreationEnabled в EF Core? - PullRequest
0 голосов
/ 19 марта 2019

Что эквивалентно .Configuration в Entity Framework Core? Ошибка получения ниже

Примеры кодов:

        List<DocumentStatus> documentStatuses;
        using (var db = new ModelDBContext())
        {
            db.Configuration.ProxyCreationEnabled = false;
            documentStatuses = db.DocumentStatus.ToList();
        }


        using (var db = new ModelDBContext())
        {
            db.Configuration.ProxyCreationEnabled = false;
            //Expression<Func<Owner, bool>> predicate = query => true;

db.Configuration.ProxyCreationEnabled

Сообщения об ошибках по всему:

Ошибка CS1061 «ModelDBContext» не содержит определения «Конфигурация», и нет доступного метода расширения «Конфигурация», принимающего первый аргумент типа «ModelDBContext» (вы пропустили директиву using или ссылку на сборку?)

1 Ответ

0 голосов
/ 19 марта 2019

На основе документов Entity Framework Core: https://docs.microsoft.com/en-us/ef/core/querying/related-data, из EF Core 2.1 существует способ включить отложенную загрузку с прокси-сервером или без него.

1. Ленивая загрузка с прокси:

а. Убедитесь, что ваше свойство навигации определено как «виртуальное»

б. Установите пакет Microsoft.EntityFrameworkCore.Proxies

с. Включите его с помощью вызова UseLazyLoadingProxies

protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    => optionsBuilder
        .UseLazyLoadingProxies()
        .UseSqlServer(myConnectionString);

Или включите его при использовании AddDbContext

.AddDbContext<BloggingContext>(
    b => b.UseLazyLoadingProxies()
          .UseSqlServer(myConnectionString));

2. Ленивая загрузка без прокси:

а. Внедрение службы 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;
    }
}

По умолчанию EF Core не будет использовать отложенную загрузку с прокси, но если вы хотите использовать прокси, следуйте 1-му подходу.

...