Czy istnieje sposób wyłączenia leniwego ładowania dla określonego zapytania w Entity Framework 6? Chcę go używać regularnie, ale czasami chcę go wyłączyć. Używam właściwości wirtualnych, aby je ładować z opóźnieniem.
c#
entity-framework
lazy-loading
Marco Alves
źródło
źródło
this.Configuration.LazyLoadingEnabled = false;
, a następnie ustawić ją ponowniethis.Configuration.LazyLoadingEnabled = true;
? Możesz również przeczytać ten msdn.microsoft.com/en-us/data/jj574232.aspxOdpowiedzi:
ustaw następujący kod przed zapytaniem, które chcesz wykonać
context.Configuration.LazyLoadingEnabled = false;
źródło
Możesz wyłączyć leniwe ładowanie dla określonego zapytania w następujący sposób:
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; } } }
źródło
Być może czegoś tutaj brakuje, ale zamiast zmieniać konfigurację za każdym razem, czy innym podejściem może być użycie
.Include()
tylko tych zapytań, w których chcesz chętnie ładować?Załóżmy, że mamy
Product
klasę, która ma właściwość nawigacji doColour
klasy, możesz załadowaćColour
dlaProduct
czegoś takiego -var product = _context.Products .Where(p => p.Name == "Thingy") .Include(x => x.Colours) .ToList();
źródło
Przejdź do właściwości diagramu i znajdź właściwość wyznaczoną do leniwego ładowania i wyłącz ją.
Jeśli używasz najpierw kodu, przejdź do obszaru konfiguracji i wyłącz go stamtąd za pomocą:
this.Configuration.LazyLoadingEnabled = false;
źródło
W EF Core:
context.ChangeTracker.LazyLoadingEnabled = false;
Na tę odpowiedź .
źródło
Inne podejście do innej wersji EF (Entity Framework 5)
//Note: ContextOptions instead of ChangeTracker or Configuration context.ContextOptions.LazyLoadingEnabled = false;
źródło
context
jest toObjectContext
, bardziej lub mniej wycofanego poprzednika zapakowane,DbContext
.Załóżmy, że masz to:
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); }
Wciąż ładowałbyś się leniwie, pomimo wyraźnego ustawienia nie. Poprawka jest łatwa, zmień to na:
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(); }
źródło