Share via


관련 데이터의 명시적 로드

명시적 로드

DbContext.Entry(...) API를 통해 탐색 속성을 명시적으로 로드할 수 있습니다.

using (var context = new BloggingContext())
{
    var blog = context.Blogs
        .Single(b => b.BlogId == 1);

    context.Entry(blog)
        .Collection(b => b.Posts)
        .Load();

    context.Entry(blog)
        .Reference(b => b.Owner)
        .Load();
}

관련 엔터티를 반환하는 별도의 쿼리를 실행하여 탐색 속성을 명시적으로 로드할 수도 있습니다. 변경 내용 추적이 사용되는 경우 쿼리가 엔터티를 구체화하면 EF Core는 새로 로드된 엔터티의 탐색 속성을 이미 로드된 엔터티를 참조하도록 자동으로 설정하고, 이미 로드된 엔터티의 탐색 속성을 새로 로드된 엔터티를 참조하도록 설정합니다.

탐색 속성의 내용을 나타내는 LINQ 쿼리를 가져올 수도 있습니다.

그러면 쿼리를 통해 다른 연산자를 적용할 수 있습니다. 예를 들면 메모리로 로드하지 않고도 관련 엔터티에 대해 집계 연산자를 적용하는 것입니다.

using (var context = new BloggingContext())
{
    var blog = context.Blogs
        .Single(b => b.BlogId == 1);

    var postCount = context.Entry(blog)
        .Collection(b => b.Posts)
        .Query()
        .Count();
}

메모리로 로드되는 관련 엔터티를 필터링할 수도 있습니다.

using (var context = new BloggingContext())
{
    var blog = context.Blogs
        .Single(b => b.BlogId == 1);

    var goodPosts = context.Entry(blog)
        .Collection(b => b.Posts)
        .Query()
        .Where(p => p.Rating > 3)
        .ToList();
}