Entity Framework: как отключить ленивую загрузку для конкретного запроса?

Есть ли способ отключить ленивую загрузку для конкретного запроса в Entity Framework 6? Я хочу использовать его регулярно, но иногда я хочу его отключить. Я использую виртуальные свойства для их ленивой загрузки.

Ответ 1

установите следующий код перед запросом, который вы хотите выполнить

context.Configuration.LazyLoadingEnabled = false;

Ответ 2

Вы можете отключить Lazy загрузку для конкретного запроса следующим образом:

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;
        }
    }
}

Ответ 3

Возможно, мне что-то не хватает, но вместо того, чтобы менять конфигурацию каждый раз, может ли другой подход использовать .Include() только в тех запросах, где вы хотите загружать?

Предположим, что у нас есть класс Product, который имеет свойство навигации для класса Colour, вы можете загрузить Colour для Product, как это, -

var product = _context.Products
    .Where(p => p.Name == "Thingy")
        .Include(x => x.Colours)
        .ToList();

Ответ 4

Перейдите к свойствам диаграммы и найдите свойство, предназначенное для ленивой загрузки и отключите его.

Если вы сначала используете код, перейдите в свою область конфигурации и отключите его оттуда:

this.Configuration.LazyLoadingEnabled = false;

Ответ 5

Предположим, у вас есть это:

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);
}

Вы все равно получите ленивую загрузку, несмотря на явную настройку не делать этого. Исправить несложно, замените его следующим образом:

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();
}