public static IQueryable <Product> UseOptions(this IQueryable <Product> query, ProductRetrievalOptions options) { if (options == null) { throw new ArgumentNullException(nameof(options)); } if (!options.ForUpdate) { query = query.AsNoTracking(); } if (options.LoadEvent) { query = query.Include(e => e.EventInfo); } if (options.LoadVariants) { query = query.Include(e => e.ProductVariants); } return(query); }
public async Task <Product> GetProductByIdAsync( int productId, ProductRetrievalOptions options, CancellationToken cancellationToken) { return(await _context.Products .UseOptions(options ?? ProductRetrievalOptions.Default) .SingleOrDefaultAsync(p => p.ProductId == productId, cancellationToken) ?? throw new NotFoundException($"Product {productId} not found")); }
public async Task <ICollection <Product> > ListProductsAsync( ProductListRequest request, ProductRetrievalOptions options, CancellationToken cancellationToken) { return(await _context.Products .UseFilter(request.EventInfoId, request.Filter) .UseOrder(request.Order, request.Descending) .UseOptions(options ?? ProductRetrievalOptions.Default) .ToArrayAsync(cancellationToken)); }