using System.Collections.Generic; using System.Linq; using Microsoft.EntityFrameworkCore; namespace DataLayer { public static class LibraryQueries { public static List GetLibrary_Flat_WithTracking(this LibationContext context) => context .Library .GetLibrary() .ToList(); public static List GetLibrary_Flat_NoTracking(this LibationContext context) => context .Library .AsNoTracking() .GetLibrary() .ToList(); public static LibraryBook GetLibraryBook_Flat_NoTracking(this LibationContext context, string productId) => context .Library .AsNoTracking() .GetLibraryBook(productId); /// This is still IQueryable. YOU MUST CALL ToList() YOURSELF public static IQueryable GetLibrary(this IQueryable library) => library // owned items are always loaded. eg: book.UserDefinedItem, book.Supplements .Include(le => le.Book).ThenInclude(b => b.SeriesLink).ThenInclude(sb => sb.Series) .Include(le => le.Book).ThenInclude(b => b.ContributorsLink).ThenInclude(c => c.Contributor) .Include(le => le.Book).ThenInclude(b => b.Category).ThenInclude(c => c.ParentCategory); public static LibraryBook GetLibraryBook(this IQueryable library, string productId) => library .GetLibrary() .SingleOrDefault(le => le.Book.AudibleProductId == productId); } }