From eebd0e76b6eedbb06bc1d002589f35422ed3523d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Sat, 3 Feb 2018 22:04:39 +0300 Subject: [PATCH] All repo methods should be virtual and use async if returns Task. --- .../Abp/Domain/Repositories/RepositoryBase.cs | 1 - .../EntityFrameworkCore/EfCoreRepository.cs | 14 +++++----- .../Abp/Identity/IdentityUserAppService.cs | 2 -- .../Identity/EfCoreIdentityRoleRepository.cs | 8 +++--- .../Identity/EfCoreIdentityUserRepository.cs | 27 +++++++++---------- .../IdentityServer/ApiResourceRepository.cs | 2 +- .../Abp/IdentityServer/ClientRepository.cs | 4 +-- .../IdentityResourceRepository.cs | 8 +++--- .../MemoryDb/MemoryDbRepository.cs | 2 +- .../Repositories/MongoDB/MongoDbRepository.cs | 2 +- .../MultiTenancy/EfCoreTenantRepository.cs | 10 +++---- 11 files changed, 38 insertions(+), 42 deletions(-) diff --git a/src/Volo.Abp.Ddd/Volo/Abp/Domain/Repositories/RepositoryBase.cs b/src/Volo.Abp.Ddd/Volo/Abp/Domain/Repositories/RepositoryBase.cs index b716142436..ba901e649c 100644 --- a/src/Volo.Abp.Ddd/Volo/Abp/Domain/Repositories/RepositoryBase.cs +++ b/src/Volo.Abp.Ddd/Volo/Abp/Domain/Repositories/RepositoryBase.cs @@ -50,7 +50,6 @@ namespace Volo.Abp.Domain.Repositories return Task.CompletedTask; } - //TODO: Is that needed..? protected virtual IQueryable ApplyDataFilters(IQueryable query) { if (typeof(ISoftDelete).IsAssignableFrom(typeof(TEntity))) diff --git a/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Domain/Repositories/EntityFrameworkCore/EfCoreRepository.cs b/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Domain/Repositories/EntityFrameworkCore/EfCoreRepository.cs index d30bd6115e..a75d5f4cf8 100644 --- a/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Domain/Repositories/EntityFrameworkCore/EfCoreRepository.cs +++ b/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Domain/Repositories/EntityFrameworkCore/EfCoreRepository.cs @@ -76,22 +76,22 @@ namespace Volo.Abp.Domain.Repositories.EntityFrameworkCore } } - public virtual Task EnsureCollectionLoadedAsync( + public virtual async Task EnsureCollectionLoadedAsync( TEntity entity, Expression>> propertyExpression, CancellationToken cancellationToken = default) where TProperty : class { - return DbContext.Entry(entity).Collection(propertyExpression).LoadAsync(GetCancellationToken(cancellationToken)); + await DbContext.Entry(entity).Collection(propertyExpression).LoadAsync(GetCancellationToken(cancellationToken)); } - public virtual Task EnsurePropertyLoadedAsync( + public virtual async Task EnsurePropertyLoadedAsync( TEntity entity, Expression> propertyExpression, CancellationToken cancellationToken = default) where TProperty : class { - return DbContext.Entry(entity).Reference(propertyExpression).LoadAsync(GetCancellationToken(cancellationToken)); + await DbContext.Entry(entity).Reference(propertyExpression).LoadAsync(GetCancellationToken(cancellationToken)); } } @@ -108,7 +108,7 @@ namespace Volo.Abp.Domain.Repositories.EntityFrameworkCore } - public TEntity Get(TKey id) + public virtual TEntity Get(TKey id) { var entity = Find(id); @@ -137,9 +137,9 @@ namespace Volo.Abp.Domain.Repositories.EntityFrameworkCore return DbSet.Find(id); } - public virtual Task FindAsync(TKey id, CancellationToken cancellationToken = default) + public virtual async Task FindAsync(TKey id, CancellationToken cancellationToken = default) { - return DbSet.FindAsync(new object[] { id }, GetCancellationToken(cancellationToken)); + return await DbSet.FindAsync(new object[] { id }, GetCancellationToken(cancellationToken)); } public virtual void Delete(TKey id) diff --git a/src/Volo.Abp.Identity.Application/Volo/Abp/Identity/IdentityUserAppService.cs b/src/Volo.Abp.Identity.Application/Volo/Abp/Identity/IdentityUserAppService.cs index 2683ee1405..c660c614ac 100644 --- a/src/Volo.Abp.Identity.Application/Volo/Abp/Identity/IdentityUserAppService.cs +++ b/src/Volo.Abp.Identity.Application/Volo/Abp/Identity/IdentityUserAppService.cs @@ -5,8 +5,6 @@ using Volo.Abp.Application.Dtos; namespace Volo.Abp.Identity { - //TODO: Consider a way of passing cancellation token to all async application service methods! - public class IdentityUserAppService : IdentityAppServiceBase, IIdentityUserAppService { private readonly IdentityUserManager _userManager; diff --git a/src/Volo.Abp.Identity.EntityFrameworkCore/Volo/Abp/Identity/EfCoreIdentityRoleRepository.cs b/src/Volo.Abp.Identity.EntityFrameworkCore/Volo/Abp/Identity/EfCoreIdentityRoleRepository.cs index 638edd970e..ba57e90cfb 100644 --- a/src/Volo.Abp.Identity.EntityFrameworkCore/Volo/Abp/Identity/EfCoreIdentityRoleRepository.cs +++ b/src/Volo.Abp.Identity.EntityFrameworkCore/Volo/Abp/Identity/EfCoreIdentityRoleRepository.cs @@ -18,12 +18,12 @@ namespace Volo.Abp.Identity { } - public Task FindByNormalizedNameAsync(string normalizedRoleName, CancellationToken cancellationToken) + public virtual async Task FindByNormalizedNameAsync(string normalizedRoleName, CancellationToken cancellationToken) { - return DbSet.FirstOrDefaultAsync(r => r.NormalizedName == normalizedRoleName, cancellationToken); + return await DbSet.FirstOrDefaultAsync(r => r.NormalizedName == normalizedRoleName, cancellationToken); } - public async Task> GetListAsync(string sorting = null, int maxResultCount = int.MaxValue, int skipCount = 0) + public virtual async Task> GetListAsync(string sorting = null, int maxResultCount = int.MaxValue, int skipCount = 0) { return await this .OrderBy(sorting ?? nameof(IdentityRole.Name)) @@ -31,7 +31,7 @@ namespace Volo.Abp.Identity .ToListAsync(); } - public async Task GetCountAsync(CancellationToken cancellationToken = default) + public virtual async Task GetCountAsync(CancellationToken cancellationToken = default) { return await this.LongCountAsync(cancellationToken); } diff --git a/src/Volo.Abp.Identity.EntityFrameworkCore/Volo/Abp/Identity/EfCoreIdentityUserRepository.cs b/src/Volo.Abp.Identity.EntityFrameworkCore/Volo/Abp/Identity/EfCoreIdentityUserRepository.cs index 48aa9df6ab..7803b55ced 100644 --- a/src/Volo.Abp.Identity.EntityFrameworkCore/Volo/Abp/Identity/EfCoreIdentityUserRepository.cs +++ b/src/Volo.Abp.Identity.EntityFrameworkCore/Volo/Abp/Identity/EfCoreIdentityUserRepository.cs @@ -19,24 +19,23 @@ namespace Volo.Abp.Identity { } - public Task FindByNormalizedUserNameAsync(string normalizedUserName, CancellationToken cancellationToken) + public virtual async Task FindByNormalizedUserNameAsync(string normalizedUserName, CancellationToken cancellationToken) { - return DbSet.FirstOrDefaultAsync(u => u.NormalizedUserName == normalizedUserName, cancellationToken); + return await DbSet.FirstOrDefaultAsync(u => u.NormalizedUserName == normalizedUserName, cancellationToken); } - public Task> GetRoleNamesAsync(Guid userId) + public virtual async Task> GetRoleNamesAsync(Guid userId) { var query = from userRole in DbContext.UserRoles join role in DbContext.Roles on userRole.RoleId equals role.Id where userRole.UserId.Equals(userId) select role.Name; - return query.ToListAsync(); + return await query.ToListAsync(); } - public async Task FindByLoginAsync(string loginProvider, string providerKey, CancellationToken cancellationToken) + public virtual async Task FindByLoginAsync(string loginProvider, string providerKey, CancellationToken cancellationToken) { - //TODO: This should be changed since loginProvider, providerKey are not PKs. var userLogin = await DbContext.UserLogins .Where(login => login.LoginProvider == loginProvider && login.ProviderKey == providerKey) .FirstOrDefaultAsync(cancellationToken); @@ -49,12 +48,12 @@ namespace Volo.Abp.Identity return await DbSet.FindAsync(new object[] { userLogin.UserId }, cancellationToken); } - public Task FindByNormalizedEmailAsync(string normalizedEmail, CancellationToken cancellationToken) + public virtual async Task FindByNormalizedEmailAsync(string normalizedEmail, CancellationToken cancellationToken) { - return DbSet.FirstOrDefaultAsync(u => u.NormalizedEmail == normalizedEmail, cancellationToken); + return await DbSet.FirstOrDefaultAsync(u => u.NormalizedEmail == normalizedEmail, cancellationToken); } - public async Task> GetListByClaimAsync(Claim claim, CancellationToken cancellationToken) + public virtual async Task> GetListByClaimAsync(Claim claim, CancellationToken cancellationToken) { var query = from userclaims in DbContext.UserClaims join user in DbContext.Users on userclaims.UserId equals user.Id @@ -64,7 +63,7 @@ namespace Volo.Abp.Identity return await query.ToListAsync(cancellationToken); } - public async Task> GetListByNormalizedRoleNameAsync(string normalizedRoleName, CancellationToken cancellationToken) + public virtual async Task> GetListByNormalizedRoleNameAsync(string normalizedRoleName, CancellationToken cancellationToken) { var role = await DbContext.Roles.Where(x => x.NormalizedName == normalizedRoleName).FirstOrDefaultAsync(cancellationToken); @@ -81,7 +80,7 @@ namespace Volo.Abp.Identity return await query.ToListAsync(cancellationToken); } - public async Task> GetListAsync(string sorting, int maxResultCount, int skipCount, string filter, CancellationToken cancellationToken = default) + public virtual async Task> GetListAsync(string sorting, int maxResultCount, int skipCount, string filter, CancellationToken cancellationToken = default) { return await this.WhereIf( !filter.IsNullOrWhiteSpace(), @@ -94,12 +93,12 @@ namespace Volo.Abp.Identity .ToListAsync(cancellationToken); } - public async Task> GetListAsync(string sorting, int maxResultCount, int skipCount) + public virtual async Task> GetListAsync(string sorting, int maxResultCount, int skipCount) { return await this.OrderBy(sorting ?? nameof(IdentityUser.UserName)).PageBy(skipCount, maxResultCount).ToListAsync(); } - public async Task> GetRolesAsync(Guid userId) + public virtual async Task> GetRolesAsync(Guid userId) { var query = from userRole in DbContext.UserRoles join role in DbContext.Roles on userRole.RoleId equals role.Id @@ -109,7 +108,7 @@ namespace Volo.Abp.Identity return await query.ToListAsync(); } - public async Task GetCountAsync(CancellationToken cancellationToken = default) + public virtual async Task GetCountAsync(CancellationToken cancellationToken = default) { return await this.LongCountAsync(cancellationToken); } diff --git a/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/ApiResourceRepository.cs b/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/ApiResourceRepository.cs index e4516d2b00..a1c55d6bf8 100644 --- a/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/ApiResourceRepository.cs +++ b/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/ApiResourceRepository.cs @@ -16,7 +16,7 @@ namespace Volo.Abp.IdentityServer } - public async Task FindByNameAsync(string name, CancellationToken cancellationToken = default) + public virtual async Task FindByNameAsync(string name, CancellationToken cancellationToken = default) { return await this.FirstOrDefaultAsync(ar => ar.Name == name, cancellationToken); } diff --git a/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/ClientRepository.cs b/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/ClientRepository.cs index 190bc06e7b..43698a0caf 100644 --- a/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/ClientRepository.cs +++ b/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/ClientRepository.cs @@ -15,9 +15,9 @@ namespace Volo.Abp.IdentityServer } - public Task FindByCliendIdIncludingAllAsync(string clientId) + public virtual async Task FindByCliendIdIncludingAllAsync(string clientId) { - return DbSet + return await DbSet .Include(x => x.AllowedGrantTypes) .Include(x => x.RedirectUris) .Include(x => x.PostLogoutRedirectUris) diff --git a/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/IdentityResourceRepository.cs b/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/IdentityResourceRepository.cs index c12202316d..4be163bcd1 100644 --- a/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/IdentityResourceRepository.cs +++ b/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/IdentityResourceRepository.cs @@ -22,7 +22,7 @@ namespace Volo.Abp.IdentityServer } - public async Task> FindIdentityResourcesByScopeAsync(string[] scopeNames) + public virtual async Task> FindIdentityResourcesByScopeAsync(string[] scopeNames) { var query = from identityResource in DbSet.Include(x => x.UserClaims) where scopeNames.Contains(identityResource.Name) @@ -31,7 +31,7 @@ namespace Volo.Abp.IdentityServer return await query.ToListAsync(); } - public async Task> FindApiResourcesByScopeAsync(string[] scopeNames) + public virtual async Task> FindApiResourcesByScopeAsync(string[] scopeNames) { var query = from api in DbContext.ApiResources where api.Scopes.Any(x => scopeNames.Contains(x.Name)) @@ -46,7 +46,7 @@ namespace Volo.Abp.IdentityServer return await query.ToListAsync(); } - public async Task FindApiResourceAsync(string name) + public virtual async Task FindApiResourceAsync(string name) { var query = from apiResource in DbContext.ApiResources where apiResource.Name == name @@ -61,7 +61,7 @@ namespace Volo.Abp.IdentityServer return await query.FirstOrDefaultAsync(); } - public async Task GetAllResourcesAsync() + public virtual async Task GetAllResourcesAsync() { var identity = DbContext.IdentityResources .Include(x => x.UserClaims); diff --git a/src/Volo.Abp.MemoryDb/Volo/Abp/Domain/Repositories/MemoryDb/MemoryDbRepository.cs b/src/Volo.Abp.MemoryDb/Volo/Abp/Domain/Repositories/MemoryDb/MemoryDbRepository.cs index e8fb1fb098..1f47825067 100644 --- a/src/Volo.Abp.MemoryDb/Volo/Abp/Domain/Repositories/MemoryDb/MemoryDbRepository.cs +++ b/src/Volo.Abp.MemoryDb/Volo/Abp/Domain/Repositories/MemoryDb/MemoryDbRepository.cs @@ -60,7 +60,7 @@ namespace Volo.Abp.Domain.Repositories.MemoryDb return base.Insert(entity, autoSave); } - private void SetIdIfNeeded(TEntity entity) + protected virtual void SetIdIfNeeded(TEntity entity) { if (typeof(TKey) == typeof(int) || typeof(TKey) == typeof(long) || typeof(TKey) == typeof(Guid)) { diff --git a/src/Volo.Abp.MongoDB/Volo/Abp/Domain/Repositories/MongoDB/MongoDbRepository.cs b/src/Volo.Abp.MongoDB/Volo/Abp/Domain/Repositories/MongoDB/MongoDbRepository.cs index 717f9a5771..58471b6d97 100644 --- a/src/Volo.Abp.MongoDB/Volo/Abp/Domain/Repositories/MongoDB/MongoDbRepository.cs +++ b/src/Volo.Abp.MongoDB/Volo/Abp/Domain/Repositories/MongoDB/MongoDbRepository.cs @@ -140,7 +140,7 @@ namespace Volo.Abp.Domain.Repositories.MongoDB return Builders.Filter.Eq(e => e.Id, entity.Id); } - private static FilterDefinition CreateEntityFilter(TKey id) + protected virtual FilterDefinition CreateEntityFilter(TKey id) { return Builders.Filter.Eq(e => e.Id, id); } diff --git a/src/Volo.Abp.MultiTenancy.EntityFrameworkCore/Volo/Abp/MultiTenancy/EfCoreTenantRepository.cs b/src/Volo.Abp.MultiTenancy.EntityFrameworkCore/Volo/Abp/MultiTenancy/EfCoreTenantRepository.cs index 992f0d5281..42a225d86d 100644 --- a/src/Volo.Abp.MultiTenancy.EntityFrameworkCore/Volo/Abp/MultiTenancy/EfCoreTenantRepository.cs +++ b/src/Volo.Abp.MultiTenancy.EntityFrameworkCore/Volo/Abp/MultiTenancy/EfCoreTenantRepository.cs @@ -19,32 +19,32 @@ namespace Volo.Abp.MultiTenancy } - public async Task FindByNameAsync(string name, CancellationToken cancellationToken = default) + public virtual async Task FindByNameAsync(string name, CancellationToken cancellationToken = default) { return await DbSet .FirstOrDefaultAsync(t => t.Name == name, cancellationToken); } - public async Task FindByNameIncludeDetailsAsync(string name, CancellationToken cancellationToken = default) + public virtual async Task FindByNameIncludeDetailsAsync(string name, CancellationToken cancellationToken = default) { return await DbSet .Include(t => t.ConnectionStrings) //TODO: Why not creating a virtual Include method in EfCoreRepository and override to add included properties to be available for every query..? .FirstOrDefaultAsync(t => t.Name == name, cancellationToken); } - public async Task FindWithIncludeDetailsAsync(Guid id, CancellationToken cancellationToken = default) + public virtual async Task FindWithIncludeDetailsAsync(Guid id, CancellationToken cancellationToken = default) { return await DbSet .Include(t => t.ConnectionStrings) .FirstOrDefaultAsync(t => t.Id == id, cancellationToken); } - public async Task GetCountAsync(CancellationToken cancellationToken = default) + public virtual async Task GetCountAsync(CancellationToken cancellationToken = default) { return await DbSet.LongCountAsync(cancellationToken); } - public async Task> GetListAsync(string sorting, int maxResultCount, int skipCount, string filter, CancellationToken cancellationToken = default) + public virtual async Task> GetListAsync(string sorting, int maxResultCount, int skipCount, string filter, CancellationToken cancellationToken = default) { return await this.WhereIf( !filter.IsNullOrWhiteSpace(),