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);
        }
Exemplo n.º 2
0
 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"));
 }
Exemplo n.º 3
0
 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));
 }