Есть ли способ отключить ленивую загрузку для определенного запроса на Entity Framework 6? Я хочу использовать его регулярно, но иногда хочу отключить. Я использую виртуальные свойства для их ленивой загрузки.
c#
entity-framework
lazy-loading
Марко Алвес
источник
источник
this.Configuration.LazyLoadingEnabled = false;
, а затем установить его сноваthis.Configuration.LazyLoadingEnabled = true;
? Кроме того, вы можете прочитать это msdn.microsoft.com/en-us/data/jj574232.aspxОтветы:
установите следующий код перед запросом, который вы хотите выполнить
context.Configuration.LazyLoadingEnabled = false;
источник
Вы можете отключить отложенную загрузку для определенного запроса следующим образом:
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; } } }
источник
Возможно, мне здесь что-то не хватает, но вместо того, чтобы каждый раз менять конфигурацию, можно было бы использовать другой подход
.Include()
только для тех запросов, которые вы хотите загрузить?Предположим, у нас есть
Product
класс, у которого есть свойство навигации дляColour
класса, вы можете загрузитьColour
егоProduct
примерно так:var product = _context.Products .Where(p => p.Name == "Thingy") .Include(x => x.Colours) .ToList();
источник
Перейдите в свойства диаграммы, найдите свойство, предназначенное для отложенной загрузки, и отключите его.
Если вы сначала используете код, перейдите в область конфигурации и отключите его оттуда с помощью:
this.Configuration.LazyLoadingEnabled = false;
источник
В EF Core:
context.ChangeTracker.LazyLoadingEnabled = false;
За этот ответ .
источник
Еще один подход для другой версии EF (Entity Framework 5)
//Note: ContextOptions instead of ChangeTracker or Configuration context.ContextOptions.LazyLoadingEnabled = false;
источник
context
- этоObjectContext
более или менее устаревший предшественник своей оболочкиDbContext
.Предположим, у вас есть это:
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); }
У вас все равно будет отложенная загрузка, несмотря на явную настройку not to. Исправить легко, измените его на это:
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(); }
источник