Skip to content

Commit ee51cec

Browse files
shuebner-zeissjaredcnance
authored andcommitted
removed dependency on query realization from EntityResourceService
1 parent 5abf5c5 commit ee51cec

File tree

3 files changed

+24
-4
lines changed

3 files changed

+24
-4
lines changed

src/JsonApiDotNetCore/Data/DefaultEntityRepository.cs

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -157,5 +157,20 @@ public virtual async Task<IEnumerable<TEntity>> PageAsync(IQueryable<TEntity> en
157157
.Take(numberOfElementsInPage)
158158
.ToListAsync();
159159
}
160+
161+
public async Task<int> CountAsync(IQueryable<TEntity> entities)
162+
{
163+
return await entities.CountAsync();
164+
}
165+
166+
public Task<TEntity> FirstOrDefaultAsync(IQueryable<TEntity> entities)
167+
{
168+
return entities.FirstOrDefaultAsync();
169+
}
170+
171+
public async Task<IReadOnlyList<TEntity>> ToListAsync(IQueryable<TEntity> entities)
172+
{
173+
return await entities.ToListAsync();
174+
}
160175
}
161176
}

src/JsonApiDotNetCore/Data/IEntityReadRepository.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,5 +27,11 @@ public interface IEntityReadRepository<TEntity, in TId>
2727
Task<TEntity> GetAsync(TId id);
2828

2929
Task<TEntity> GetAndIncludeAsync(TId id, string relationshipName);
30+
31+
Task<int> CountAsync(IQueryable<TEntity> entities);
32+
33+
Task<TEntity> FirstOrDefaultAsync(IQueryable<TEntity> entities);
34+
35+
Task<IReadOnlyList<TEntity>> ToListAsync(IQueryable<TEntity> entities);
3036
}
3137
}

src/JsonApiDotNetCore/Services/EntityResourceService.cs

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
using JsonApiDotNetCore.Extensions;
66
using JsonApiDotNetCore.Internal;
77
using JsonApiDotNetCore.Models;
8-
using Microsoft.EntityFrameworkCore;
98
using Microsoft.Extensions.Logging;
109

1110
namespace JsonApiDotNetCore.Services
@@ -50,7 +49,7 @@ public virtual async Task<IEnumerable<T>> GetAsync()
5049
entities = IncludeRelationships(entities, _jsonApiContext.QuerySet.IncludedRelationships);
5150

5251
if (_jsonApiContext.Options.IncludeTotalRecordCount)
53-
_jsonApiContext.PageManager.TotalRecords = await entities.CountAsync();
52+
_jsonApiContext.PageManager.TotalRecords = await _entities.CountAsync(entities);
5453

5554
// pagination should be done last since it will execute the query
5655
var pagedEntities = await ApplyPageQueryAsync(entities);
@@ -72,12 +71,12 @@ private bool ShouldIncludeRelationships()
7271

7372
private async Task<T> GetWithRelationshipsAsync(TId id)
7473
{
75-
var query = _entities.Get();
74+
var query = _entities.Get().Where(e => e.Id.Equals(id));
7675
_jsonApiContext.QuerySet.IncludedRelationships.ForEach(r =>
7776
{
7877
query = _entities.Include(query, r);
7978
});
80-
return await query.FirstOrDefaultAsync(e => e.Id.Equals(id));
79+
return await _entities.FirstOrDefaultAsync(query);
8180
}
8281

8382
public virtual async Task<object> GetRelationshipsAsync(TId id, string relationshipName)

0 commit comments

Comments
 (0)