• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

loresoft / MediatR.CommandQuery / 11418431610

19 Oct 2024 02:43PM UTC coverage: 58.337% (+0.9%) from 57.424%
11418431610

push

github

pwelter34
add HybridCache, misc refactors

331 of 675 branches covered (49.04%)

Branch coverage included in aggregate %.

28 of 176 new or added lines in 24 files covered. (15.91%)

156 existing lines in 33 files now uncovered.

1163 of 1886 relevant lines covered (61.66%)

19.49 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

80.56
/src/MediatR.CommandQuery.EntityFrameworkCore/Handlers/EntitySelectQueryHandler.cs
1
using System.Linq.Dynamic.Core;
2

3
using AutoMapper;
4
using AutoMapper.QueryableExtensions;
5

6
using MediatR.CommandQuery.Extensions;
7
using MediatR.CommandQuery.Queries;
8

9
using Microsoft.EntityFrameworkCore;
10
using Microsoft.Extensions.Logging;
11

12
namespace MediatR.CommandQuery.EntityFrameworkCore.Handlers;
13

14
public class EntitySelectQueryHandler<TContext, TEntity, TReadModel>
15
    : DataContextHandlerBase<TContext, EntitySelectQuery<TReadModel>, IReadOnlyCollection<TReadModel>>
16
    where TContext : DbContext
17
    where TEntity : class
18
{
19
    public EntitySelectQueryHandler(ILoggerFactory loggerFactory, TContext dataContext, IMapper mapper)
20
        : base(loggerFactory, dataContext, mapper)
6✔
21
    {
22
    }
6✔
23

24

25
    protected override async Task<IReadOnlyCollection<TReadModel>> Process(EntitySelectQuery<TReadModel> request, CancellationToken cancellationToken)
26
    {
27
        ArgumentNullException.ThrowIfNull(request);
6✔
28

29
        var query = DataContext
6✔
30
            .Set<TEntity>()
6✔
31
            .AsNoTracking();
6✔
32

33
        // build query from filter
34
        query = BuildQuery(request, query);
6✔
35

36
        // page the query and convert to read model
37
        var result = await QueryList(request, query, cancellationToken).ConfigureAwait(false);
6✔
38

39
        return result;
6✔
40
    }
6✔
41

42

43
    protected virtual IQueryable<TEntity> BuildQuery(EntitySelectQuery<TReadModel> request, IQueryable<TEntity> query)
44
    {
45
        var entitySelect = request?.Select;
6!
46

47
        // build query from filter
48
        if (entitySelect?.Filter != null)
6!
49
            query = query.Filter(entitySelect.Filter);
6✔
50

51
        // add raw query
52
        if (!string.IsNullOrEmpty(entitySelect?.Query))
6!
UNCOV
53
            query = query.Where(entitySelect.Query);
×
54

55
        return query;
6✔
56
    }
57

58
    protected virtual async Task<IReadOnlyCollection<TReadModel>> QueryList(EntitySelectQuery<TReadModel> request, IQueryable<TEntity> query, CancellationToken cancellationToken)
59
    {
60
        return await query
6!
61
            .Sort(request?.Select?.Sort)
6✔
62
            .ProjectTo<TReadModel>(Mapper.ConfigurationProvider)
6✔
63
            .ToListAsync(cancellationToken)
6✔
64
            .ConfigureAwait(false);
6✔
65
    }
6✔
66

67
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc