EF Core - Как включить отложенную загрузку в ядре Entity Framework? - PullRequest
0 голосов
/ 24 сентября 2018

Я отделил контекст чтения от записи. Теперь я собираюсь включить LazyLoading в ReadOnlyContext по умолчанию.Я также использовал следующий метод, но, к сожалению, он не работает.

protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
    optionsBuilder
        .UseLazyLoadingProxies()
        .UseSqlServer(@"Data Source=.;Initial Catalog=UniversityDb;Persist Security Info=True;User ID=admin;Password=asdasdsadasd");
}

моя модель:

public class Partner : BaseEntity<int>
{
    public string Name { get; set; }
    public DateTime CreateDate { get; set; }
    public bool IsDisabled { get; set; }
    public bool IsDeleted { get; set; }
    public virtual ICollection<PartnerUser> PartnerUsers { get; set; }
}

моя версия ef:

Ядро EntityFrameworkv 2.1.2

public async Task<PartnerQuery> Get(int id)
{
    var result = await _partnerDbSet.SingleAsync(c => c.Id == id);
    var list = result.PartnerUsers;
    return new PartnerQuery()
    {
        CreateDate = result.CreateDate,
        Name = result.Name,
        Id = result.Id
    };
}

Я получил эту ошибку:

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

Как решить эту проблему?

1 Ответ

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

Вы используете AsNoTracking() где-то в своем коде, Ленивая загрузка не будет работать при использовании метода AsNoTracking().

У вас есть два варианта:

  1. Используйте метод Include() для загрузки ваших отношений

  2. Игнорируйте предупреждение и просто получите null для ваших отношений

Вы можете настроить EFигнорировать эту ошибку:

protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
    optionsBuilder
        .UseLazyLoadingProxies()
        .ConfigureWarnings(warnings => warnings.Ignore(CoreEventId.DetachedLazyLoadingWarning))
        .UseSqlServer(@"Data Source=.;Initial Catalog=UniversityDb;Persist Security Info=True;User ID=admin;Password=asdasdsadasd");
}
...