From 806fec85d25e09d7c7cdb0bbc1801495a2c375a1 Mon Sep 17 00:00:00 2001 From: maliming Date: Fri, 20 Mar 2020 18:51:53 +0800 Subject: [PATCH] MongoDbRepository needs to filter when deleting entity based on Id. Resolve #3256 --- .../Repositories/MongoDB/MongoDbRepository.cs | 5 +-- .../Abp/TestApp/Testing/SoftDelete_Tests.cs | 40 +++++++++++++++++++ 2 files changed, 41 insertions(+), 4 deletions(-) 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 5533cb9f74..956bc7853f 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 @@ -369,10 +369,7 @@ namespace Volo.Abp.Domain.Repositories.MongoDB bool autoSave = false, CancellationToken cancellationToken = default) { - return Collection.DeleteOneAsync( - CreateEntityFilter(id), - GetCancellationToken(cancellationToken) - ); + return DeleteAsync(x => x.Id.Equals(id), autoSave, cancellationToken); } protected override FilterDefinition CreateEntityFilter(TEntity entity, bool withConcurrencyStamp = false, string concurrencyStamp = null) diff --git a/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/SoftDelete_Tests.cs b/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/SoftDelete_Tests.cs index 013c3eb3c8..b8618fd6a3 100644 --- a/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/SoftDelete_Tests.cs +++ b/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/SoftDelete_Tests.cs @@ -39,6 +39,24 @@ namespace Volo.Abp.TestApp.Testing } } + [Fact] + public async Task Should_Cancel_Deletion_For_Soft_Delete_Entities_ById() + { + var douglas = await PersonRepository.GetAsync(TestDataBuilder.UserDouglasId); + await PersonRepository.DeleteAsync(douglas.Id); + + douglas = await PersonRepository.FindAsync(TestDataBuilder.UserDouglasId); + douglas.ShouldBeNull(); + + using (DataFilter.Disable()) + { + douglas = await PersonRepository.FindAsync(TestDataBuilder.UserDouglasId); + douglas.ShouldNotBeNull(); + douglas.IsDeleted.ShouldBeTrue(); + douglas.DeletionTime.ShouldNotBeNull(); + } + } + [Fact] public async Task Should_Handle_Deletion_On_Update_For_Soft_Delete_Entities() { @@ -82,5 +100,27 @@ namespace Volo.Abp.TestApp.Testing douglas.Phones.ShouldNotBeEmpty(); } } + + [Fact] + public async Task Cascading_Entities_Should_Not_Be_Deleted_When_Soft_Deleting_Entities_ById() + { + var douglas = await PersonRepository.GetAsync(TestDataBuilder.UserDouglasId); + douglas.Phones.ShouldNotBeEmpty(); + + await PersonRepository.DeleteAsync(douglas.Id); + + douglas = await PersonRepository.FindAsync(TestDataBuilder.UserDouglasId); + douglas.ShouldBeNull(); + + using (DataFilter.Disable()) + { + douglas = await PersonRepository.FindAsync(TestDataBuilder.UserDouglasId); + douglas.ShouldNotBeNull(); + douglas.IsDeleted.ShouldBeTrue(); + douglas.DeletionTime.ShouldNotBeNull(); + + douglas.Phones.ShouldNotBeEmpty(); + } + } } }