Я реализовал поиск песен. Однако мне нужна отложенная загрузка и загрузка полных данных об исполнителях только в случае необходимости в запросе.
Я использую Microsoft.EntityFrameworkCore.
Полный код доступен по адресу: https://github.com/danisuba10/Musify-o/ ... chSongs.cs
В начале я включаю SongArtistRelations :
Код: Выделить всё
var query = _context.Songs
.Include(s => s.SongArtistRelations)
.AsQueryable();
Код: Выделить всё
if (request.IncludeArtists)
{
query = query.Include(s => s.SongArtistRelations.Select(ar => ar.Artist));
}
System.InvalidOperationException: выражение 's.SongArtistRelations.AsQueryable().Select(ar = > ar.Artist)» недействителен внутри операции «Include», поскольку он не представляет доступ к свойству: «t => t.MyProperty». Чтобы настроить навигацию, объявленную в производных типах, используйте приведение ('t => ((Derived)t).MyProperty') или оператор 'as' ('t => (t as Derived).MyProperty'). Доступ к навигации по коллекции можно отфильтровать, составив операции Where, OrderBy(Descending), thenBy(Descending), Skip или Take. Дополнительные сведения о включении связанных данных см. на странице https://go.microsoft.com/fwlink/?LinkID=746393.
на Microsoft.EntityFrameworkCore.Query.Internal.NavigationExpandingExpressionVisitor.g__ExtractIncludeFilter| 36_0(выражение currentExpression, выражение includeExpression)
at Microsoft.EntityFrameworkCore.Query.Internal.NavigationExpandingExpressionVisitor.ProcessInclude(источник NavigationExpansionExpression, выражение выражения, логическое значение thenInclude, логическое значение setLoaded)
at Microsoft.EntityFrameworkCore.Query.Internal.NavigationExpandingExpressionVisitor.VisitMethodCall(MethodCallExpression MethodCallExpression)
в Microsoft.EntityFrameworkCore.Query.Internal.NavigationExpandingExpressionVisitor.Expand(Expression query)
в Microsoft. EntityFrameworkCore.Query.QueryTranslationPreprocessor.Process(запрос по выражению)
в Microsoft.EntityFrameworkCore.Query.QueryCompilationContext.CreateQueryExecutor[TResult](запрос по выражению)
в Microsoft.EntityFrameworkCore.Storage .Database.CompileQuery[TResult](запрос-выражение, логический асинхронный запрос)
в Microsoft.EntityFrameworkCore.Query.Internal.QueryCompiler.CompileQueryCore[TResult](база данных IDatabase, запрос-выражение, модель IModel, логический асинхронный)
в Microsoft.EntityFrameworkCore.Query.Internal.QueryCompiler.c__DisplayClass12_0
Код: Выделить всё
1.b__0() at Microsoft.EntityFrameworkCore.Query.Internal.CompiledQueryCache.GetOrAddQuery[TResult](Object cacheKey, Funcв Microsoft.EntityFrameworkCore.Query.Internal.QueryCompiler.ExecuteAsync[TResult](запрос-выражение, CancellationToken cancelToken)
в Microsoft.EntityFrameworkCore. Query.Internal.EntityQueryProvider.ExecuteAsync[TResult](выражение выражения, CancellationToken cancelToken)
в Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryable
Код: Выделить всё
1.GetAsyncEnumerator(CancellationToken cancellationToken) at Microsoft.EntityFrameworkCore.EntityFrameworkQueryableExtensions.IncludableQueryableв System.Runtime.CompilerServices.ConfiguredCancelableAsyncEnumerable
Код: Выделить всё
1.GetAsyncEnumerator() at Microsoft.EntityFrameworkCore.EntityFrameworkQueryableExtensions.ToListAsync[TSource](IQueryableв Application.Songs.SearchSongs.Handler.Handle (запрос запроса, CancellationToken cancelToken) в C:\Project Folder\CSHARP\Musify-o\Application\ Songs\SearchSongs.cs:line 68
Как я могу позже условно включать дочерние элементы, не выполняя Include.ThenInclude таким образом SongArtistRelations будет запрошен дважды, что приведет к проблемам с производительностью.
Подробнее здесь: https://stackoverflow.com/questions/790 ... uded-prope
Мобильная версия