コード例 #1
0
 protected EfCoreControllerBase(
     IEfQueryRepository <TEntity> queryRepository,
     IEfRepositoryAsync <TEntity> mutateRepository)
 {
     QueryRepository  = queryRepository;
     MutateRepository = mutateRepository;
 }
コード例 #2
0
 public GetTasksService(
     IEfQueryRepository <Domain.Task> taskRepo,
     IOptions <PaginationOption> paginationOption)
 {
     _taskRepo         = taskRepo;
     _paginationOption = paginationOption;
 }
コード例 #3
0
 internal static async Task <PaginatedItem <TResponse> > QueryAsync <TDbContext, TEntity, TResponse>(
     this IEfQueryRepository <TDbContext, TEntity> repo,
     Criterion criterion,
     Expression <Func <TEntity, TResponse> > selector,
     params Expression <Func <TEntity, object> >[] includeProperties)
     where TDbContext : DbContext
     where TEntity : class, IEntity
 {
     return(await GetDataAsync(repo, criterion, selector, null, includeProperties));
 }
コード例 #4
0
 public static async Task <PaginatedItem <TResponse> > QueryAsync <TDbContext, TEntity, TResponse>(
     this IEfQueryRepository <TDbContext, TEntity> repo,
     Criterion criterion,
     Expression <Func <TEntity, TResponse> > selector,
     Func <IQueryable <TEntity>, IIncludableQueryable <TEntity, object> > include = null,
     bool disableTracking = true)
     where TDbContext : DbContext
     where TEntity : class, IAggregateRoot
 {
     return(await GetDataAsync(repo, criterion, selector, null, include, disableTracking));
 }
コード例 #5
0
 public CartService(
     IEfQueryRepository <Domain.Cart> queryRepository,
     IEfRepositoryAsync <Domain.Cart> mutateRepository,
     IEfRepositoryAsync <CartItem> cartItemMutateRepository,
     ICatalogService catalogService)
 {
     _catalogService           = catalogService;
     _queryRepository          = queryRepository;
     _mutateRepository         = mutateRepository;
     _cartItemMutateRepository = cartItemMutateRepository;
 }
コード例 #6
0
 public TaskController(
     IUnitOfWorkAsync unitOfWork,
     IEfQueryRepository <Domain.Task> taskQuery,
     IGetTasksService getTasksService,
     IOptions <PaginationOption> paginationOption)
 {
     _taskRepository   = unitOfWork.Repository <Domain.Task>() as IEfRepositoryAsync <Domain.Task>;
     _taskQuery        = taskQuery;
     _getTasksService  = getTasksService;
     _paginationOption = paginationOption;
 }
コード例 #7
0
        private static async Task <PaginatedItem <TResponse> > GetDataAsync <TDbContext, TEntity, TResponse>(
            IEfQueryRepository <TDbContext, TEntity> repo,
            Criterion criterion,
            Expression <Func <TEntity, TResponse> > selector,
            Expression <Func <TEntity, bool> > filter = null,
            params Expression <Func <TEntity, object> >[] includeProperties)
            where TDbContext : DbContext
            where TEntity : class, IEntity
        {
            if (criterion.PageSize < 1 || criterion.PageSize > criterion.DefaultPagingOption.PageSize)
            {
                criterion.SetPageSize(criterion.DefaultPagingOption.PageSize);
            }

            var queryable = repo.Queryable();

            if (includeProperties != null && includeProperties.Count() > 0)
            {
                queryable = includeProperties.Aggregate(
                    queryable,
                    (current, include) => current.Include(include));
            }

            if (filter != null)
            {
                queryable = queryable.Where(filter);
            }

            if (!string.IsNullOrWhiteSpace(criterion.SortBy))
            {
                var isDesc = string.Equals(criterion.SortOrder, "desc", StringComparison.OrdinalIgnoreCase) ? true : false;
                queryable = queryable.OrderByPropertyName(criterion.SortBy, isDesc);
            }

            var results = await queryable
                          .Skip(criterion.CurrentPage *criterion.PageSize)
                          .Take(criterion.PageSize)
                          .AsNoTracking()
                          .Select(selector)
                          .ToListAsync();

            var totalRecord = await queryable.CountAsync();

            var totalPages = (int)Math.Ceiling((double)totalRecord / criterion.PageSize);

            if (criterion.CurrentPage > totalPages)
            {
                criterion.SetCurrentPage(totalPages);
            }

            return(new PaginatedItem <TResponse>(totalRecord, totalPages, results));
        }
コード例 #8
0
        private static async Task <PaginatedItem <TResponse> > GetDataAsync <TDbContext, TEntity, TResponse>(
            IEfQueryRepository <TDbContext, TEntity> repo,
            Criterion criterion,
            Expression <Func <TEntity, TResponse> > selector,
            Expression <Func <TEntity, bool> > filter = null,
            Func <IQueryable <TEntity>, IIncludableQueryable <TEntity, object> > include = null,
            bool disableTracking = true)
            where TDbContext : DbContext
            where TEntity : class, IAggregateRoot
        {
            var queryable = repo.Queryable();

            if (disableTracking)
            {
                queryable = queryable.AsNoTracking();
            }

            if (include != null)
            {
                queryable = include.Invoke(queryable);
            }

            if (filter != null)
            {
                queryable = queryable.Where(filter);
            }

            if (!string.IsNullOrWhiteSpace(criterion.SortBy))
            {
                var isDesc = string.Equals(criterion.SortOrder, "desc", StringComparison.OrdinalIgnoreCase)
                    ? true
                    : false;
                queryable = queryable.OrderByPropertyName(criterion.SortBy, isDesc);
            }

            var results = await queryable
                          .Skip(criterion.CurrentPage *criterion.PageSize)
                          .Take(criterion.PageSize)
                          .Select(selector)
                          .ToListAsync();

            var totalRecord = await queryable.CountAsync();

            var totalPages = (int)Math.Ceiling((double)totalRecord / criterion.PageSize);

            if (criterion.CurrentPage > totalPages)
            {
                // criterion.SetCurrentPage(totalPages);
            }

            return(new PaginatedItem <TResponse>(totalRecord, totalPages, results));
        }
コード例 #9
0
        public static async Task <Domain.Cart> GetFullCart(this IEfQueryRepository <Domain.Cart> cartRepo, Guid cartId)
        {
            var cart = await cartRepo.GetByIdAsync(
                cartId,
                cartQueryable => cartQueryable
                .Include(x => x.CartItems)
                .ThenInclude((CartItem cartItem) => cartItem.Product));

            if (cart == null)
            {
                throw new Exception($"Could not find the cart[{cartId}]");
            }

            return(cart);
        }
コード例 #10
0
        internal static async Task <TEntity> FindOneAsync <TDbContext, TEntity>(
            this IEfQueryRepository <TDbContext, TEntity> repo,
            Expression <Func <TEntity, bool> > filter,
            params Expression <Func <TEntity, object> >[] includeProperties)
            where TDbContext : DbContext
            where TEntity : class, IEntity
        {
            var dbSet = repo.Queryable();

            foreach (var includeProperty in includeProperties)
            {
                dbSet = dbSet.Include(includeProperty);
            }

            return(await dbSet.FirstOrDefaultAsync(filter));
        }
コード例 #11
0
        public static async Task <IReadOnlyList <TEntity> > ListAsync <TDbContext, TEntity>(
            this IEfQueryRepository <TDbContext, TEntity> repo,
            Func <IQueryable <TEntity>, IIncludableQueryable <TEntity, object> > include = null,
            bool disableTracking = true)
            where TDbContext : DbContext
            where TEntity : class, IEntity
        {
            IQueryable <TEntity> queryable = repo.Queryable();

            if (disableTracking)
            {
                queryable = queryable.AsNoTracking() as IQueryable <TEntity>;
            }

            include?.Invoke(queryable);

            return(await queryable.ToListAsync());
        }
コード例 #12
0
        public static async Task <IReadOnlyList <TEntity> > ListAsync <TDbContext, TEntity>(
            this IEfQueryRepository <TDbContext, TEntity> repo,
            params Expression <Func <TEntity, object> >[] includeProperties)
            where TDbContext : DbContext
            where TEntity : class, IEntity
        {
            var queryable = repo.Queryable().AsNoTracking() as IQueryable <TEntity>;

            if (includeProperties != null)
            {
                foreach (var includeProperty in includeProperties)
                {
                    queryable = queryable.Include(includeProperty);
                }
            }

            return(await queryable.ToListAsync());
        }
コード例 #13
0
        public static async Task <TEntity> FindOneAsync <TDbContext, TEntity>(
            this IEfQueryRepository <TDbContext, TEntity> repo,
            Expression <Func <TEntity, bool> > filter,
            Func <IQueryable <TEntity>, IIncludableQueryable <TEntity, object> > include = null,
            bool disableTracking = true)
            where TDbContext : DbContext
            where TEntity : class, IEntity
        {
            IQueryable <TEntity> queryable = repo.Queryable();

            include?.Invoke(queryable);

            if (disableTracking)
            {
                queryable = queryable.AsNoTracking() as IQueryable <TEntity>;
            }

            return(await queryable.FirstOrDefaultAsync(filter));
        }
コード例 #14
0
        public static async Task <TEntity> GetByIdAsync <TDbContext, TEntity>(
            this IEfQueryRepository <TDbContext, TEntity> repo,
            Guid id,
            params Expression <Func <TEntity, object> >[] includeProperties)
            where TDbContext : DbContext
            where TEntity : class, IEntity

        {
            var queryable = repo.Queryable().AsNoTracking() as IQueryable <TEntity>;

            if (includeProperties != null)
            {
                foreach (var includeProperty in includeProperties)
                {
                    queryable = queryable.Include(includeProperty);
                }
            }

            return(await queryable.SingleOrDefaultAsync(e => e.Id.Equals(id)));
        }
コード例 #15
0
        public static async Task <TEntity> GetByIdAsync <TDbContext, TEntity>(
            this IEfQueryRepository <TDbContext, TEntity> repo,
            Guid id,
            Func <IQueryable <TEntity>, IIncludableQueryable <TEntity, object> > include = null,
            bool disableTracking = true)
            where TDbContext : DbContext
            where TEntity : class, IAggregateRoot

        {
            var queryable = repo.Queryable();

            if (disableTracking)
            {
                queryable = queryable.AsNoTracking();
            }

            if (include != null)
            {
                queryable = include.Invoke(queryable);
            }

            return(await queryable.SingleOrDefaultAsync(e => e.Id.Equals(id)));
        }
コード例 #16
0
 public InventoryService(IEfQueryRepository <Domain.Inventory> repo)
 {
     _repo = repo;
 }
コード例 #17
0
 public QueryFluent(IEfQueryRepository <TEntity> repository)
 {
     _repository = repository;
     _includes   = new List <Expression <Func <TEntity, object> > >();
 }
コード例 #18
0
 protected CrudControllerBase(
     IEfQueryRepository <TEntity> queryRepository,
     IEfRepositoryAsync <TEntity> mutateRepository)
     : base(queryRepository, mutateRepository)
 {
 }
コード例 #19
0
 public QueryFluent(IEfQueryRepository <TEntity> repository, IQueryObject <TEntity> queryObject)
     : this(repository) { _filter = queryObject.Query(); }
コード例 #20
0
 public QueryFluent(IEfQueryRepository <TEntity> repository, Expression <Func <TEntity, bool> > filter)
     : this(repository) { _filter = filter; }