Programing

Entity Framework : 특정 쿼리에 대해 지연로드를 비활성화하는 방법은 무엇입니까?

lottogame 2020. 10. 19. 07:38
반응형

Entity Framework : 특정 쿼리에 대해 지연로드를 비활성화하는 방법은 무엇입니까?


Entity Framework 6에서 특정 쿼리에 대해 지연로드를 비활성화하는 방법이 있습니까? 정기적으로 사용하고 싶지만 때때로 비활성화하고 싶습니다. 가상 속성을 사용하여 지연로드하고 있습니다.


실행하려는 쿼리 앞에 다음 코드를 설정하십시오.

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()eager load를 원하는 쿼리에만 사용 하는 또 다른 방법이 있을까요?

Product클래스에 대한 탐색 속성 이있는 클래스 가 있다고 가정 하면 다음 과 같이 Colour로드 할 수 있습니다.ColourProduct

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

다이어그램 속성으로 이동하여 지연로드로 지정된 속성을 찾아 비활성화합니다.

먼저 코드를 사용하는 경우 구성 영역으로 이동하여 다음을 사용하여 비활성화하십시오.

this.Configuration.LazyLoadingEnabled = false;

EF Core : context.ChangeTracker.LazyLoadingEnabled = false;

이 답변 .


다음이 있다고 가정합니다.

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

다른 EF 버전에 대한 또 다른 approcah

context.ContextOptions.LazyLoadingEnabled = false;

참고 URL : https://stackoverflow.com/questions/24022957/entity-framework-how-to-disable-lazy-loading-for-specific-query

반응형