From 41adcd251d93b87bbe9f2ee5c261c8b81a4d829a Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Fri, 24 Sep 2021 13:26:09 +0800 Subject: [PATCH] Make IRepository not inherit from IQueryable --- .../Services/AbstractKeyReadOnlyAppService.cs | 24 ---------------- .../Repositories/IReadOnlyRepository.cs | 4 +-- .../Abp/Domain/Repositories/RepositoryBase.cs | 22 --------------- .../EntityFrameworkCore/EfCoreRepository.cs | 8 +----- .../Repositories/MongoDB/MongoDbRepository.cs | 22 ++------------- .../EfCoreAsyncQueryableProvider_Tests.cs | 21 ++++++++------ .../Repositories/Repository_Basic_Tests.cs | 1 + .../Repository_Queryable_Tests.cs | 12 ++++---- .../EntityFrameworkCore/CityRepository.cs | 1 + .../MongoDbAsyncQueryableProvider_Tests.cs | 16 +++++------ .../MongoDbAsyncQueryableProvider_Tests.cs | 10 +++---- .../Repositories/Repository_Basic_Tests.cs | 16 +++++------ .../TestApp/Application/DistrictAppService.cs | 4 +-- .../Abp/TestApp/Testing/DomainEvents_Tests.cs | 28 +++++++++---------- .../Testing/MultiTenant_Filter_Tests.cs | 16 +++++------ .../Repository_Basic_Tests_With_Int_Pk.cs | 4 +-- .../Testing/Repository_Queryable_Tests.cs | 8 +++--- .../Repository_Specifications_Tests.cs | 6 ++-- .../Testing/SoftDelete_Filter_Tests.cs | 22 +++++++-------- .../EfCoreTenantRepository.cs | 2 +- .../EfCoreAbpUserRepositoryBase.cs | 2 +- 21 files changed, 92 insertions(+), 157 deletions(-) diff --git a/framework/src/Volo.Abp.Ddd.Application/Volo/Abp/Application/Services/AbstractKeyReadOnlyAppService.cs b/framework/src/Volo.Abp.Ddd.Application/Volo/Abp/Application/Services/AbstractKeyReadOnlyAppService.cs index 54123bc843..528a8c67a1 100644 --- a/framework/src/Volo.Abp.Ddd.Application/Volo/Abp/Application/Services/AbstractKeyReadOnlyAppService.cs +++ b/framework/src/Volo.Abp.Ddd.Application/Volo/Abp/Application/Services/AbstractKeyReadOnlyAppService.cs @@ -153,19 +153,6 @@ namespace Volo.Abp.Application.Services return query; } - /// - /// This method should create based on given input. - /// It should filter query if needed, but should not do sorting or paging. - /// Sorting should be done in and paging should be done in - /// methods. - /// - /// The input. - [Obsolete("Override the CreateFilteredQueryAsync method instead.")] - protected virtual IQueryable CreateFilteredQuery(TGetListInput input) - { - return ReadOnlyRepository; - } - /// /// This method should create based on given input. /// It should filter query if needed, but should not do sorting or paging. @@ -175,17 +162,6 @@ namespace Volo.Abp.Application.Services /// The input. protected virtual async Task> CreateFilteredQueryAsync(TGetListInput input) { - /* If user has overridden the CreateFilteredQuery method, - * we don't want to make breaking change in this point. - */ -#pragma warning disable 618 - var query = CreateFilteredQuery(input); -#pragma warning restore 618 - if (!ReferenceEquals(query, ReadOnlyRepository)) - { - return query; - } - return await ReadOnlyRepository.GetQueryableAsync(); } diff --git a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/IReadOnlyRepository.cs b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/IReadOnlyRepository.cs index 7aeffdad12..bf0704f085 100644 --- a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/IReadOnlyRepository.cs +++ b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/IReadOnlyRepository.cs @@ -10,7 +10,7 @@ using Volo.Abp.Linq; namespace Volo.Abp.Domain.Repositories { - public interface IReadOnlyRepository : IQueryable, IReadOnlyBasicRepository + public interface IReadOnlyRepository: IReadOnlyBasicRepository where TEntity : class, IEntity { IAsyncQueryableExecuter AsyncExecuter { get; } @@ -26,7 +26,7 @@ namespace Volo.Abp.Domain.Repositories Task> WithDetailsAsync(params Expression>[] propertySelectors); //TODO: CancellationToken Task> GetQueryableAsync(); //TODO: CancellationToken - + /// /// Gets a list of entities by the given . /// diff --git a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/RepositoryBase.cs b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/RepositoryBase.cs index 0b32d54d45..da10901420 100644 --- a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/RepositoryBase.cs +++ b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/RepositoryBase.cs @@ -1,6 +1,5 @@ using JetBrains.Annotations; using System; -using System.Collections; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; @@ -15,15 +14,6 @@ namespace Volo.Abp.Domain.Repositories public abstract class RepositoryBase : BasicRepositoryBase, IRepository, IUnitOfWorkManagerAccessor where TEntity : class, IEntity { - [Obsolete("This method will be removed in future versions.")] - public virtual Type ElementType => GetQueryable().ElementType; - - [Obsolete("This method will be removed in future versions.")] - public virtual Expression Expression => GetQueryable().Expression; - - [Obsolete("This method will be removed in future versions.")] - public virtual IQueryProvider Provider => GetQueryable().Provider; - [Obsolete("Use WithDetailsAsync method.")] public virtual IQueryable WithDetails() { @@ -46,18 +36,6 @@ namespace Volo.Abp.Domain.Repositories return GetQueryableAsync(); } - [Obsolete("This method will be removed in future versions.")] - IEnumerator IEnumerable.GetEnumerator() - { - return GetEnumerator(); - } - - [Obsolete("This method will be removed in future versions.")] - public IEnumerator GetEnumerator() - { - return GetQueryable().GetEnumerator(); - } - [Obsolete("Use GetQueryableAsync method.")] protected abstract IQueryable GetQueryable(); diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Domain/Repositories/EntityFrameworkCore/EfCoreRepository.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Domain/Repositories/EntityFrameworkCore/EfCoreRepository.cs index c330beb281..fb32e5a21d 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Domain/Repositories/EntityFrameworkCore/EfCoreRepository.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Domain/Repositories/EntityFrameworkCore/EfCoreRepository.cs @@ -17,7 +17,7 @@ using Volo.Abp.MultiTenancy; namespace Volo.Abp.Domain.Repositories.EntityFrameworkCore { - public class EfCoreRepository : RepositoryBase, IEfCoreRepository, IAsyncEnumerable + public class EfCoreRepository : RepositoryBase, IEfCoreRepository where TDbContext : IEfCoreDbContext where TEntity : class, IEntity { @@ -381,12 +381,6 @@ namespace Volo.Abp.Domain.Repositories.EntityFrameworkCore return query; } - [Obsolete("This method will be deleted in future versions.")] - public IAsyncEnumerator GetAsyncEnumerator(CancellationToken cancellationToken = default) - { - return DbSet.AsAsyncEnumerable().GetAsyncEnumerator(cancellationToken); - } - protected virtual void CheckAndSetId(TEntity entity) { if (entity is IEntity entityWithGuidId) diff --git a/framework/src/Volo.Abp.MongoDB/Volo/Abp/Domain/Repositories/MongoDB/MongoDbRepository.cs b/framework/src/Volo.Abp.MongoDB/Volo/Abp/Domain/Repositories/MongoDB/MongoDbRepository.cs index a40117e0ff..696e7846c5 100644 --- a/framework/src/Volo.Abp.MongoDB/Volo/Abp/Domain/Repositories/MongoDB/MongoDbRepository.cs +++ b/framework/src/Volo.Abp.MongoDB/Volo/Abp/Domain/Repositories/MongoDB/MongoDbRepository.cs @@ -2,6 +2,7 @@ using JetBrains.Annotations; using MongoDB.Driver; using MongoDB.Driver.Linq; using System; +using System.Collections; using System.Collections.Generic; using System.Linq; using System.Linq.Dynamic.Core; @@ -23,8 +24,7 @@ namespace Volo.Abp.Domain.Repositories.MongoDB { public class MongoDbRepository : RepositoryBase, - IMongoDbRepository, - IMongoQueryable + IMongoDbRepository where TMongoDbContext : IAbpMongoDbContext where TEntity : class, IEntity { @@ -720,24 +720,6 @@ namespace Volo.Abp.Domain.Repositories.MongoDB return aggregate; } - - [Obsolete("This method will be removed in future versions.")] - public QueryableExecutionModel GetExecutionModel() - { - return GetMongoQueryable().GetExecutionModel(); - } - - [Obsolete("This method will be removed in future versions.")] - public IAsyncCursor ToCursor(CancellationToken cancellationToken = new CancellationToken()) - { - return GetMongoQueryable().ToCursor(GetCancellationToken(cancellationToken)); - } - - [Obsolete("This method will be removed in future versions.")] - public Task> ToCursorAsync(CancellationToken cancellationToken = new CancellationToken()) - { - return GetMongoQueryable().ToCursorAsync(GetCancellationToken(cancellationToken)); - } } public class MongoDbRepository diff --git a/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/EfCoreAsyncQueryableProvider_Tests.cs b/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/EfCoreAsyncQueryableProvider_Tests.cs index 9a6c0817f2..93e0de6639 100644 --- a/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/EfCoreAsyncQueryableProvider_Tests.cs +++ b/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/EfCoreAsyncQueryableProvider_Tests.cs @@ -24,28 +24,31 @@ namespace Volo.Abp.EntityFrameworkCore } [Fact] - public void Should_Accept_EfCore_Related_Queries() + public async Task Should_Accept_EfCore_Related_Queries() { - var query = _personRepository.Where(p => p.Age > 0); - - _efCoreAsyncQueryableProvider.CanExecute(query).ShouldBeTrue(); + using ( _ = _unitOfWorkManager.Begin()) + { + var query = (await _personRepository.GetQueryableAsync()).Where(p => p.Age > 0); + + _efCoreAsyncQueryableProvider.CanExecute(query).ShouldBeTrue(); + } } [Fact] public void Should_Not_Accept_Other_Providers() { var query = new[] {1, 2, 3}.AsQueryable().Where(x => x > 0); - + _efCoreAsyncQueryableProvider.CanExecute(query).ShouldBeFalse(); } - + [Fact] public async Task Should_Execute_Queries() { using (var uow = _unitOfWorkManager.Begin()) { - var query = _personRepository.Where(p => p.Age > 0); - + var query = (await _personRepository.GetQueryableAsync()).Where(p => p.Age > 0); + (await _efCoreAsyncQueryableProvider.CountAsync(query) > 0).ShouldBeTrue(); (await _efCoreAsyncQueryableProvider.FirstOrDefaultAsync(query)).ShouldNotBeNull(); (await _efCoreAsyncQueryableProvider.ToListAsync(query)).Count.ShouldBeGreaterThan(0); @@ -54,4 +57,4 @@ namespace Volo.Abp.EntityFrameworkCore } } } -} \ No newline at end of file +} diff --git a/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/Repositories/Repository_Basic_Tests.cs b/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/Repositories/Repository_Basic_Tests.cs index 3d5d7b656b..ab3217b9f3 100644 --- a/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/Repositories/Repository_Basic_Tests.cs +++ b/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/Repositories/Repository_Basic_Tests.cs @@ -1,6 +1,7 @@ using System.Threading.Tasks; using Microsoft.EntityFrameworkCore; using Shouldly; +using Volo.Abp.Domain.Repositories; using Volo.Abp.TestApp.Testing; using Xunit; diff --git a/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/Repositories/Repository_Queryable_Tests.cs b/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/Repositories/Repository_Queryable_Tests.cs index a5b8aa0577..8149cdbe32 100644 --- a/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/Repositories/Repository_Queryable_Tests.cs +++ b/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/Repositories/Repository_Queryable_Tests.cs @@ -26,9 +26,9 @@ namespace Volo.Abp.EntityFrameworkCore.Repositories [Fact] public async Task GetBookList() { - await WithUnitOfWorkAsync(() => + await WithUnitOfWorkAsync(async () => { - _bookRepository.Any().ShouldBeTrue(); + (await _bookRepository.AnyAsync()).ShouldBeTrue(); return Task.CompletedTask; }); } @@ -36,9 +36,9 @@ namespace Volo.Abp.EntityFrameworkCore.Repositories [Fact] public async Task GetPhoneInSecondDbContextList() { - await WithUnitOfWorkAsync(() => + await WithUnitOfWorkAsync(async () => { - _phoneInSecondDbContextRepository.Any().ShouldBeTrue(); + (await _phoneInSecondDbContextRepository.AnyAsync()).ShouldBeTrue(); return Task.CompletedTask; }); } @@ -46,9 +46,9 @@ namespace Volo.Abp.EntityFrameworkCore.Repositories [Fact] public async Task EfCore_Include_Extension() { - await WithUnitOfWorkAsync(() => + await WithUnitOfWorkAsync(async () => { - var person = PersonRepository.Include(p => p.Phones).Single(p => p.Id == TestDataBuilder.UserDouglasId); + var person = await (await PersonRepository.GetDbSetAsync()).Include(p => p.Phones).SingleAsync(p => p.Id == TestDataBuilder.UserDouglasId); person.Name.ShouldBe("Douglas"); person.Phones.Count.ShouldBe(2); return Task.CompletedTask; diff --git a/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/TestApp/EntityFrameworkCore/CityRepository.cs b/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/TestApp/EntityFrameworkCore/CityRepository.cs index cd85cbcb5a..b3d1663edb 100644 --- a/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/TestApp/EntityFrameworkCore/CityRepository.cs +++ b/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/TestApp/EntityFrameworkCore/CityRepository.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using Microsoft.EntityFrameworkCore; +using Volo.Abp.Domain.Repositories; using Volo.Abp.Domain.Repositories.EntityFrameworkCore; using Volo.Abp.EntityFrameworkCore; using Volo.Abp.TestApp.Domain; diff --git a/framework/test/Volo.Abp.MongoDB.Tests/Volo/Abp/MongoDB/MongoDbAsyncQueryableProvider_Tests.cs b/framework/test/Volo.Abp.MongoDB.Tests/Volo/Abp/MongoDB/MongoDbAsyncQueryableProvider_Tests.cs index 22013d9b63..3daff7049c 100644 --- a/framework/test/Volo.Abp.MongoDB.Tests/Volo/Abp/MongoDB/MongoDbAsyncQueryableProvider_Tests.cs +++ b/framework/test/Volo.Abp.MongoDB.Tests/Volo/Abp/MongoDB/MongoDbAsyncQueryableProvider_Tests.cs @@ -24,10 +24,10 @@ namespace Volo.Abp.MongoDB } [Fact] - public void Should_Accept_MongoDb_Related_Queries() + public async Task Should_Accept_MongoDb_Related_Queries() { - var query = _personRepository.Where(p => p.Age > 0); - + var query = (await _personRepository.GetQueryableAsync()).Where(p => p.Age > 0); + _mongoDbAsyncQueryableProvider.CanExecute(query).ShouldBeTrue(); } @@ -35,17 +35,17 @@ namespace Volo.Abp.MongoDB public void Should_Not_Accept_Other_Providers() { var query = new[] {1, 2, 3}.AsQueryable().Where(x => x > 0); - + _mongoDbAsyncQueryableProvider.CanExecute(query).ShouldBeFalse(); } - + [Fact] public async Task Should_Execute_Queries() { using (var uow = _unitOfWorkManager.Begin()) { - var query = _personRepository.Where(p => p.Age > 0).OrderBy(p => p.Name); - + var query = (await _personRepository.GetQueryableAsync()).Where(p => p.Age > 0).OrderBy(p => p.Name); + (await _mongoDbAsyncQueryableProvider.CountAsync(query) > 0).ShouldBeTrue(); (await _mongoDbAsyncQueryableProvider.FirstOrDefaultAsync(query)).ShouldNotBeNull(); (await _mongoDbAsyncQueryableProvider.ToListAsync(query)).Count.ShouldBeGreaterThan(0); @@ -54,4 +54,4 @@ namespace Volo.Abp.MongoDB } } } -} \ No newline at end of file +} diff --git a/framework/test/Volo.Abp.MongoDB.Tests/Volo/Abp/MongoDB/Repositories/MongoDbAsyncQueryableProvider_Tests.cs b/framework/test/Volo.Abp.MongoDB.Tests/Volo/Abp/MongoDB/Repositories/MongoDbAsyncQueryableProvider_Tests.cs index 5335aa11be..48f74ab3a2 100644 --- a/framework/test/Volo.Abp.MongoDB.Tests/Volo/Abp/MongoDB/Repositories/MongoDbAsyncQueryableProvider_Tests.cs +++ b/framework/test/Volo.Abp.MongoDB.Tests/Volo/Abp/MongoDB/Repositories/MongoDbAsyncQueryableProvider_Tests.cs @@ -27,7 +27,7 @@ namespace Volo.Abp.MongoDB.Repositories [Fact] public async Task CanExecuteAsync() { - _mongoDbAsyncQueryableProvider.CanExecute(_personRepository).ShouldBeTrue(); + _mongoDbAsyncQueryableProvider.CanExecute(await _personRepository.GetQueryableAsync()).ShouldBeTrue(); _mongoDbAsyncQueryableProvider.CanExecute(await _personRepository.WithDetailsAsync()).ShouldBeTrue(); } @@ -36,7 +36,7 @@ namespace Volo.Abp.MongoDB.Repositories { using (var uow = _unitOfWorkManager.Begin()) { - (await _mongoDbAsyncQueryableProvider.FirstOrDefaultAsync(_personRepository.Where(p => p.Name == "Douglas"))).ShouldNotBeNull(); + (await _mongoDbAsyncQueryableProvider.FirstOrDefaultAsync((await _personRepository.GetQueryableAsync()).Where(p => p.Name == "Douglas"))).ShouldNotBeNull(); await uow.CompleteAsync(); } } @@ -46,7 +46,7 @@ namespace Volo.Abp.MongoDB.Repositories { using (var uow = _unitOfWorkManager.Begin()) { - (await _mongoDbAsyncQueryableProvider.AnyAsync(_personRepository, p => p.Name == "Douglas")).ShouldBeTrue(); + (await _mongoDbAsyncQueryableProvider.AnyAsync(await _personRepository.GetQueryableAsync(), p => p.Name == "Douglas")).ShouldBeTrue(); await uow.CompleteAsync(); } } @@ -56,7 +56,7 @@ namespace Volo.Abp.MongoDB.Repositories { using (var uow = _unitOfWorkManager.Begin()) { - (await _mongoDbAsyncQueryableProvider.CountAsync(_personRepository.Where(p => p.Name == "Douglas"))).ShouldBeGreaterThan(0); + (await _mongoDbAsyncQueryableProvider.CountAsync((await _personRepository.GetQueryableAsync()).Where(p => p.Name == "Douglas"))).ShouldBeGreaterThan(0); await uow.CompleteAsync(); } } @@ -66,7 +66,7 @@ namespace Volo.Abp.MongoDB.Repositories { using (var uow = _unitOfWorkManager.Begin()) { - (await _mongoDbAsyncQueryableProvider.LongCountAsync(_personRepository)).ShouldBeGreaterThan(0); + (await _mongoDbAsyncQueryableProvider.LongCountAsync(await _personRepository.GetQueryableAsync())).ShouldBeGreaterThan(0); await uow.CompleteAsync(); } } diff --git a/framework/test/Volo.Abp.MongoDB.Tests/Volo/Abp/MongoDB/Repositories/Repository_Basic_Tests.cs b/framework/test/Volo.Abp.MongoDB.Tests/Volo/Abp/MongoDB/Repositories/Repository_Basic_Tests.cs index 09b1551e3d..0be9b43db0 100644 --- a/framework/test/Volo.Abp.MongoDB.Tests/Volo/Abp/MongoDB/Repositories/Repository_Basic_Tests.cs +++ b/framework/test/Volo.Abp.MongoDB.Tests/Volo/Abp/MongoDB/Repositories/Repository_Basic_Tests.cs @@ -14,21 +14,21 @@ namespace Volo.Abp.MongoDB.Repositories public class Repository_Basic_Tests : Repository_Basic_Tests { [Fact] - public void ToMongoQueryable_Test() + public async Task ToMongoQueryable_Test() { - ((IMongoQueryable) PersonRepository).ShouldNotBeNull(); - PersonRepository.As>().ShouldNotBeNull(); - ((IMongoQueryable) PersonRepository.Where(p => p.Name == "Douglas")).ShouldNotBeNull(); - PersonRepository.Where(p => p.Name == "Douglas").As>().ShouldNotBeNull(); + (await PersonRepository.GetQueryableAsync()).ShouldNotBeNull(); + (await PersonRepository.GetQueryableAsync()).As>().ShouldNotBeNull(); + ((IMongoQueryable)(await PersonRepository.GetQueryableAsync()).Where(p => p.Name == "Douglas")).ShouldNotBeNull(); + (await PersonRepository.GetQueryableAsync()).Where(p => p.Name == "Douglas").As>().ShouldNotBeNull(); } [Fact] public async Task Linq_Queries() { - await WithUnitOfWorkAsync(() => + await WithUnitOfWorkAsync(async () => { - PersonRepository.FirstOrDefault(p => p.Name == "Douglas").ShouldNotBeNull(); - PersonRepository.Count().ShouldBeGreaterThan(0); + (await PersonRepository.GetQueryableAsync()).FirstOrDefault(p => p.Name == "Douglas").ShouldNotBeNull(); + (await PersonRepository.GetQueryableAsync()).Count().ShouldBeGreaterThan(0); return Task.CompletedTask; }); } diff --git a/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Application/DistrictAppService.cs b/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Application/DistrictAppService.cs index f7e7fde5e2..645d413692 100644 --- a/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Application/DistrictAppService.cs +++ b/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Application/DistrictAppService.cs @@ -10,7 +10,7 @@ namespace Volo.Abp.TestApp.Application //This is especially used to test the AbstractKeyCrudAppService public class DistrictAppService : AbstractKeyCrudAppService { - public DistrictAppService(IRepository repository) + public DistrictAppService(IRepository repository) : base(repository) { } @@ -23,7 +23,7 @@ namespace Volo.Abp.TestApp.Application protected override async Task GetEntityByIdAsync(DistrictKey id) { return await AsyncExecuter.FirstOrDefaultAsync( - Repository.Where(d => d.CityId == id.CityId && d.Name == id.Name) + (await Repository.GetQueryableAsync()).Where(d => d.CityId == id.CityId && d.Name == id.Name) ); } } diff --git a/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/DomainEvents_Tests.cs b/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/DomainEvents_Tests.cs index 04d0dda3c4..27154ba8de 100644 --- a/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/DomainEvents_Tests.cs +++ b/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/DomainEvents_Tests.cs @@ -13,7 +13,7 @@ using Xunit; namespace Volo.Abp.TestApp.Testing { - public abstract class DomainEvents_Tests : TestAppTestBase + public abstract class DomainEvents_Tests : TestAppTestBase where TStartupModule : IAbpModule { protected readonly IRepository PersonRepository; @@ -35,7 +35,7 @@ namespace Volo.Abp.TestApp.Testing bool douglesNameChangeHandled = false; bool customEventHandled = false; bool customEvent2Handled = false; - + LocalEventBus.Subscribe>(data => { data.Entity.Name.ShouldBe("TestPerson1"); @@ -46,7 +46,7 @@ namespace Volo.Abp.TestApp.Testing customEvent2Handled.ShouldBeFalse(); return Task.CompletedTask; }); - + LocalEventBus.Subscribe(data => { data.Value.ShouldBe("42"); @@ -57,7 +57,7 @@ namespace Volo.Abp.TestApp.Testing customEvent2Handled.ShouldBeFalse(); return Task.CompletedTask; }); - + LocalEventBus.Subscribe(data => { data.OldName.ShouldBe("Douglas"); @@ -69,7 +69,7 @@ namespace Volo.Abp.TestApp.Testing customEvent2Handled.ShouldBeFalse(); return Task.CompletedTask; }); - + LocalEventBus.Subscribe>(data => { data.Entity.Name.ShouldBe("Douglas-Updated"); @@ -80,7 +80,7 @@ namespace Volo.Abp.TestApp.Testing customEvent2Handled.ShouldBeFalse(); return Task.CompletedTask; }); - + LocalEventBus.Subscribe(data => { data.Value.ShouldBe("44"); @@ -97,13 +97,13 @@ namespace Volo.Abp.TestApp.Testing await PersonRepository.InsertAsync( new Person(Guid.NewGuid(), "TestPerson1", 42) ); - + await LocalEventBus.PublishAsync(new MyCustomEventData { Value = "42" }); var douglas = await PersonRepository.GetAsync(TestDataBuilder.UserDouglasId); douglas.ChangeName("Douglas-Updated"); await PersonRepository.UpdateAsync(douglas); - + await LocalEventBus.PublishAsync(new MyCustomEventData2 { Value = "44" }); }); } @@ -112,7 +112,7 @@ namespace Volo.Abp.TestApp.Testing public virtual async Task Should_Rollback_Uow_If_Event_Handler_Throws_Exception() { (await PersonRepository.FindAsync(x => x.Name == "TestPerson1")).ShouldBeNull(); - + LocalEventBus.Subscribe>(data => { data.Entity.Name.ShouldBe("TestPerson1"); @@ -128,7 +128,7 @@ namespace Volo.Abp.TestApp.Testing ); }); }); - + exception.Message.ShouldBe("Just to rollback the UOW"); (await PersonRepository.FindAsync(x => x.Name == "TestPerson1")).ShouldBeNull(); @@ -162,7 +162,7 @@ namespace Volo.Abp.TestApp.Testing await WithUnitOfWorkAsync(async () => { - var dougles = PersonRepository.Single(b => b.Name == "Douglas"); + var dougles = await PersonRepository.SingleAsync(b => b.Name == "Douglas"); dougles.ChangeName("Douglas-Changed"); await PersonRepository.UpdateAsync(dougles); }); @@ -172,15 +172,15 @@ namespace Volo.Abp.TestApp.Testing isLocalEventTriggered.ShouldBeTrue(); isDistributedEventTriggered.ShouldBeTrue(); } - + private class MyCustomEventData { public string Value { get; set; } } - + private class MyCustomEventData2 { public string Value { get; set; } } } -} \ No newline at end of file +} diff --git a/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/MultiTenant_Filter_Tests.cs b/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/MultiTenant_Filter_Tests.cs index da3e33ffea..2a4a012217 100644 --- a/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/MultiTenant_Filter_Tests.cs +++ b/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/MultiTenant_Filter_Tests.cs @@ -14,7 +14,7 @@ using Xunit; namespace Volo.Abp.TestApp.Testing { - public abstract class MultiTenant_Filter_Tests : TestAppTestBase + public abstract class MultiTenant_Filter_Tests : TestAppTestBase where TStartupModule : IAbpModule { private ICurrentTenant _fakeCurrentTenant; @@ -36,13 +36,13 @@ namespace Volo.Abp.TestApp.Testing [Fact] public async Task Should_Get_Person_For_Current_Tenant() { - await WithUnitOfWorkAsync(() => + await WithUnitOfWorkAsync(async () => { //TenantId = null _fakeCurrentTenant.Id.Returns((Guid?)null); - var people = _personRepository.ToList(); + var people = await _personRepository.ToListAsync(); people.Count.ShouldBe(1); people.Any(p => p.Name == "Douglas").ShouldBeTrue(); @@ -50,7 +50,7 @@ namespace Volo.Abp.TestApp.Testing _fakeCurrentTenant.Id.Returns(TestDataBuilder.TenantId1); - people = _personRepository.ToList(); + people = await _personRepository.ToListAsync(); people.Count.ShouldBe(2); people.Any(p => p.Name == TestDataBuilder.TenantId1 + "-Person1").ShouldBeTrue(); people.Any(p => p.Name == TestDataBuilder.TenantId1 + "-Person2").ShouldBeTrue(); @@ -59,7 +59,7 @@ namespace Volo.Abp.TestApp.Testing _fakeCurrentTenant.Id.Returns(TestDataBuilder.TenantId2); - people = _personRepository.ToList(); + people = await _personRepository.ToListAsync(); people.Count.ShouldBe(0); return Task.CompletedTask; @@ -69,19 +69,19 @@ namespace Volo.Abp.TestApp.Testing [Fact] public async Task Should_Get_All_People_When_MultiTenant_Filter_Is_Disabled() { - await WithUnitOfWorkAsync(() => + await WithUnitOfWorkAsync(async () => { List people; using (_multiTenantFilter.Disable()) { //Filter disabled manually - people = _personRepository.ToList(); + people = await _personRepository.ToListAsync(); people.Count.ShouldBe(3); } //Filter re-enabled automatically - people = _personRepository.ToList(); + people = await _personRepository.ToListAsync(); people.Count.ShouldBe(1); return Task.CompletedTask; diff --git a/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/Repository_Basic_Tests_With_Int_Pk.cs b/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/Repository_Basic_Tests_With_Int_Pk.cs index 821a80492b..4347120d36 100644 --- a/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/Repository_Basic_Tests_With_Int_Pk.cs +++ b/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/Repository_Basic_Tests_With_Int_Pk.cs @@ -22,9 +22,9 @@ namespace Volo.Abp.TestApp.Testing [Fact] public virtual async Task FirstOrDefault() { - await WithUnitOfWorkAsync(() => + await WithUnitOfWorkAsync(async () => { - var entity = EntityWithIntPkRepository.FirstOrDefault(e => e.Name == "Entity1"); + var entity = await EntityWithIntPkRepository.FirstOrDefaultAsync(e => e.Name == "Entity1"); entity.ShouldNotBeNull(); entity.Name.ShouldBe("Entity1"); return Task.CompletedTask; diff --git a/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/Repository_Queryable_Tests.cs b/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/Repository_Queryable_Tests.cs index 3ca511a7ea..c8710bbf2c 100644 --- a/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/Repository_Queryable_Tests.cs +++ b/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/Repository_Queryable_Tests.cs @@ -23,9 +23,9 @@ namespace Volo.Abp.TestApp.Testing [Fact] public async Task Any() { - await WithUnitOfWorkAsync(() => + await WithUnitOfWorkAsync(async () => { - PersonRepository.Any().ShouldBeTrue(); + (await PersonRepository.AnyAsync()).ShouldBeTrue(); return Task.CompletedTask; }); } @@ -33,9 +33,9 @@ namespace Volo.Abp.TestApp.Testing [Fact] public async Task Single() { - await WithUnitOfWorkAsync(() => + await WithUnitOfWorkAsync(async () => { - var person = PersonRepository.Single(p => p.Id == TestDataBuilder.UserDouglasId); + var person = await PersonRepository.SingleAsync(p => p.Id == TestDataBuilder.UserDouglasId); person.Name.ShouldBe("Douglas"); return Task.CompletedTask; }); diff --git a/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/Repository_Specifications_Tests.cs b/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/Repository_Specifications_Tests.cs index c26134b27c..9ce5499d7f 100644 --- a/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/Repository_Specifications_Tests.cs +++ b/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/Repository_Specifications_Tests.cs @@ -24,9 +24,9 @@ namespace Volo.Abp.TestApp.Testing [Fact] public async Task SpecificationWithRepository_Test() { - await WithUnitOfWorkAsync(() => + await WithUnitOfWorkAsync(async () => { - CityRepository.Count(new CitySpecification().ToExpression()).ShouldBe(1); + (await CityRepository.CountAsync(new CitySpecification().ToExpression())).ShouldBe(1); return Task.CompletedTask; }); } @@ -39,4 +39,4 @@ namespace Volo.Abp.TestApp.Testing return city => city.Name == "Istanbul"; } } -} \ No newline at end of file +} diff --git a/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/SoftDelete_Filter_Tests.cs b/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/SoftDelete_Filter_Tests.cs index f3ac8c301f..514f2d2648 100644 --- a/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/SoftDelete_Filter_Tests.cs +++ b/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/SoftDelete_Filter_Tests.cs @@ -10,7 +10,7 @@ using Xunit; namespace Volo.Abp.TestApp.Testing { - public abstract class SoftDelete_Filter_Tests : TestAppTestBase + public abstract class SoftDelete_Filter_Tests : TestAppTestBase where TStartupModule : IAbpModule { protected readonly IRepository PersonRepository; @@ -25,9 +25,9 @@ namespace Volo.Abp.TestApp.Testing [Fact] public async Task Should_Not_Get_Deleted_Entities_Linq() { - await WithUnitOfWorkAsync(() => + await WithUnitOfWorkAsync(async () => { - var person = PersonRepository.FirstOrDefault(p => p.Name == "John-Deleted"); + var person = await PersonRepository.FirstOrDefaultAsync(p => p.Name == "John-Deleted"); person.ShouldBeNull(); return Task.CompletedTask; }); @@ -46,9 +46,9 @@ namespace Volo.Abp.TestApp.Testing [Fact] public async Task Should_Not_Get_Deleted_Entities_By_Default_ToList() { - await WithUnitOfWorkAsync(() => + await WithUnitOfWorkAsync(async () => { - var people = PersonRepository.ToList(); + var people = await PersonRepository.ToListAsync(); people.Count.ShouldBe(1); people.Any(p => p.Name == "Douglas").ShouldBeTrue(); return Task.CompletedTask; @@ -58,36 +58,36 @@ namespace Volo.Abp.TestApp.Testing [Fact] public async Task Should_Get_Deleted_Entities_When_Filter_Is_Disabled() { - await WithUnitOfWorkAsync(() => + await WithUnitOfWorkAsync(async () => { //Soft delete is enabled by default - var people = PersonRepository.ToList(); + var people = await PersonRepository.ToListAsync(); people.Any(p => !p.IsDeleted).ShouldBeTrue(); people.Any(p => p.IsDeleted).ShouldBeFalse(); using (DataFilter.Disable()) { //Soft delete is disabled - people = PersonRepository.ToList(); + people = await PersonRepository.ToListAsync(); people.Any(p => !p.IsDeleted).ShouldBeTrue(); people.Any(p => p.IsDeleted).ShouldBeTrue(); using (DataFilter.Enable()) { //Soft delete is enabled again - people = PersonRepository.ToList(); + people = await PersonRepository.ToListAsync(); people.Any(p => !p.IsDeleted).ShouldBeTrue(); people.Any(p => p.IsDeleted).ShouldBeFalse(); } //Soft delete is disabled (restored previous state) - people = PersonRepository.ToList(); + people = await PersonRepository.ToListAsync(); people.Any(p => !p.IsDeleted).ShouldBeTrue(); people.Any(p => p.IsDeleted).ShouldBeTrue(); } //Soft delete is enabled (restored previous state) - people = PersonRepository.ToList(); + people = await PersonRepository.ToListAsync(); people.Any(p => !p.IsDeleted).ShouldBeTrue(); people.Any(p => p.IsDeleted).ShouldBeFalse(); diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.EntityFrameworkCore/Volo/Abp/TenantManagement/EntityFrameworkCore/EfCoreTenantRepository.cs b/modules/tenant-management/src/Volo.Abp.TenantManagement.EntityFrameworkCore/Volo/Abp/TenantManagement/EntityFrameworkCore/EfCoreTenantRepository.cs index 5da11fe767..a240732236 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.EntityFrameworkCore/Volo/Abp/TenantManagement/EntityFrameworkCore/EfCoreTenantRepository.cs +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.EntityFrameworkCore/Volo/Abp/TenantManagement/EntityFrameworkCore/EfCoreTenantRepository.cs @@ -69,7 +69,7 @@ namespace Volo.Abp.TenantManagement.EntityFrameworkCore public virtual async Task GetCountAsync(string filter = null, CancellationToken cancellationToken = default) { - return await this + return await (await GetQueryableAsync()) .WhereIf( !filter.IsNullOrWhiteSpace(), u => diff --git a/modules/users/src/Volo.Abp.Users.EntityFrameworkCore/Volo/Abp/Users/EntityFrameworkCore/EfCoreAbpUserRepositoryBase.cs b/modules/users/src/Volo.Abp.Users.EntityFrameworkCore/Volo/Abp/Users/EntityFrameworkCore/EfCoreAbpUserRepositoryBase.cs index 635d9fc8fd..55ed754509 100644 --- a/modules/users/src/Volo.Abp.Users.EntityFrameworkCore/Volo/Abp/Users/EntityFrameworkCore/EfCoreAbpUserRepositoryBase.cs +++ b/modules/users/src/Volo.Abp.Users.EntityFrameworkCore/Volo/Abp/Users/EntityFrameworkCore/EfCoreAbpUserRepositoryBase.cs @@ -22,7 +22,7 @@ namespace Volo.Abp.Users.EntityFrameworkCore public async Task FindByUserNameAsync(string userName, CancellationToken cancellationToken = default) { - return await this.OrderBy(x => x.Id).FirstOrDefaultAsync(u => u.UserName == userName, GetCancellationToken(cancellationToken)); + return await (await GetDbSetAsync()).OrderBy(x => x.Id).FirstOrDefaultAsync(u => u.UserName == userName, GetCancellationToken(cancellationToken)); } public virtual async Task> GetListAsync(IEnumerable ids, CancellationToken cancellationToken = default)