Skip to content

Commit cb2e699

Browse files
removed dependency on query realization from EntityResourceService
1 parent 06b781f commit cb2e699

File tree

4 files changed

+25
-5
lines changed

4 files changed

+25
-5
lines changed

src/JsonApiDotNetCore/Data/DefaultEntityRepository.cs

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -142,5 +142,20 @@ public virtual async Task<IEnumerable<TEntity>> PageAsync(IQueryable<TEntity> en
142142
{
143143
return await entities.Page(pageSize, pageNumber).ToListAsync();
144144
}
145+
146+
public async Task<long> CountAsync(IQueryable<TEntity> entities)
147+
{
148+
return await entities.CountAsync();
149+
}
150+
151+
public Task<TEntity> FirstOrDefaultAsync(IQueryable<TEntity> entities)
152+
{
153+
return entities.FirstOrDefaultAsync();
154+
}
155+
156+
public async Task<IReadOnlyList<TEntity>> ToListAsync(IQueryable<TEntity> entities)
157+
{
158+
return await entities.ToListAsync();
159+
}
145160
}
146161
}

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<long> 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/Internal/PageManager.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ namespace JsonApiDotNetCore.Internal
66
{
77
public class PageManager
88
{
9-
public int TotalRecords { get; set; }
9+
public long TotalRecords { get; set; }
1010
public int PageSize { get; set; }
1111
public int DefaultPageSize { get; set; }
1212
public int CurrentPage { get; set; }

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)