Entity Framework Core 2.0.1에서 중첩 엔터티의 즉시 로드
Entity Framework Core 2.0.1에서 중첩 엔터티의 즉시 로드는 다음과 같습니다. 내장된 기능이 아닙니다. 이는 여러 수준의 관계가 있는 항목을 로드할 때 문제가 되며 서로 중첩된 관련 항목에 대한 null 값이 발생합니다.
이 문제를 해결하기 위해 사용자 정의 확장 방법을 활용할 수 있습니다.
public static IQueryable<T> Include<T>(this IQueryable<T> source, IEnumerable<string> navigationPropertyPaths) where T : class { return navigationPropertyPaths.Aggregate(source, (query, path) => query.Include(path)); }
이 방법을 사용하면 문자열로 지정된 여러 탐색 속성을 즉시 로드할 수 있습니다.
또 다른 사용자 정의 확장 방법을 사용하여 엔터티 유형에 따라 포함할 경로를 생성할 수 있습니다. 메타데이터:
public static IEnumerable<string> GetIncludePaths(this DbContext context, Type clrEntityType, int maxDepth = int.MaxValue) { // Implementation omitted for brevity }
이 메소드는 항목 유형과 선택적 최대 깊이를 사용하고 포함 경로 목록을 반환합니다.
이러한 확장 메소드를 일반 저장소 메소드에 통합합니다.
public virtual async Task<IEnumerable<T>> GetAllAsync(Expression<Func<T, bool>> predicate = null) { var query = Context.Set<T>() .Include(Context.GetIncludePaths(typeof(T)); if (predicate != null) query = query.Where(predicate); return await query.ToListAsync(); }
이제 Entity Framework Core 2.0.1에서 중첩된 관련 엔터티를 즉시 로드할 수 있습니다. 이 접근 방식은 보다 포괄적인 즉시 로딩 메커니즘을 제공하여 명시적인 include 및 ThenInclude 문이 필요하지 않습니다.
위 내용은 Entity Framework Core 2.0.1에서 중첩 엔터티를 효율적으로 즉시 로드하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!