Existe alguma maneira de desativar o carregamento lento para uma consulta específica no Entity Framework 6? Quero usá-lo regularmente, mas às vezes quero desativá-lo. Estou usando propriedades virtuais para carregá-los lentamente.
c#
entity-framework
lazy-loading
Marco Alves
fonte
fonte
this.Configuration.LazyLoadingEnabled = false;
, em seguida, defini-lo novamentethis.Configuration.LazyLoadingEnabled = true;
? Além disso, você pode ler este msdn.microsoft.com/en-us/data/jj574232.aspxRespostas:
defina o seguinte código antes da consulta que deseja executar
context.Configuration.LazyLoadingEnabled = false;
fonte
Você pode desativar o carregamento lento para consultas específicas da seguinte maneira:
public static Cursos GetDatosCursoById(int cursoId) { using (var bd = new AcademyEntities()) { try { bd.Configuration.ProxyCreationEnabled = false; return bd.Cursos.FirstOrDefault(c => c.cursoId == cursoId); } catch (Exception ex) { return null; } } }
fonte
Posso estar faltando alguma coisa aqui, mas em vez de alterar a configuração toda vez, outra abordagem seria usar
.Include()
apenas nas consultas em que você deseja carregar antecipadamente?Suponha que temos uma
Product
classe que tem uma propriedade de navegação para umaColour
classe, você pode carregar oColour
para umProduct
assim -var product = _context.Products .Where(p => p.Name == "Thingy") .Include(x => x.Colours) .ToList();
fonte
Vá para as propriedades do seu diagrama e encontre uma propriedade designada para carregamento lento e desative-o.
Se você estiver usando o código primeiro, vá para a área de configuração e desative-o com:
this.Configuration.LazyLoadingEnabled = false;
fonte
No EF Core:
context.ChangeTracker.LazyLoadingEnabled = false;
Por esta resposta .
fonte
Outra aprovação para outra versão EF (Entity Framework 5)
//Note: ContextOptions instead of ChangeTracker or Configuration context.ContextOptions.LazyLoadingEnabled = false;
fonte
context
é umObjectContext
, o predecessor mais ou menos obsoleto de seu wrapperDbContext
,.Suponha que você tenha este:
IOrderedQueryable<Private.Database.DailyItem> items; using (var context = new Private.Database.PrivateDb()) { context.Configuration.LazyLoadingEnabled = false; items = context.DailyItem.OrderBy(c => c.sortOrder).OrderByDescending(c => c.isFavorite); }
Você ainda obteria carregamento lento, apesar da configuração explícita de não. A correção é fácil, mude para isto:
List<Private.Database.DailyItem> items; using (var context = new Private.Database.PrivateDb()) { // context.Configuration.LazyLoadingEnabled = false; items = context.DailyItem.OrderBy(c => c.sortOrder).OrderByDescending(c => c.isFavorite).ToList(); }
fonte