From 01d1b65cbded4c5d215f08a3b75258184c407484 Mon Sep 17 00:00:00 2001 From: maliming Date: Wed, 4 Mar 2020 14:34:00 +0800 Subject: [PATCH 1/3] Cascading entities should not be deleted when soft deleting entities. --- .../UnitOfWorkDbContextProvider.cs | 3 +++ .../Abp/TestApp/Testing/SoftDelete_Tests.cs | 22 +++++++++++++++++++ 2 files changed, 25 insertions(+) diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Uow/EntityFrameworkCore/UnitOfWorkDbContextProvider.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Uow/EntityFrameworkCore/UnitOfWorkDbContextProvider.cs index a09d756cd2..74cd8bb642 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Uow/EntityFrameworkCore/UnitOfWorkDbContextProvider.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Uow/EntityFrameworkCore/UnitOfWorkDbContextProvider.cs @@ -1,5 +1,6 @@ using System; using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.ChangeTracking; using Microsoft.EntityFrameworkCore.Storage; using Microsoft.Extensions.DependencyInjection; using Volo.Abp.Data; @@ -60,6 +61,8 @@ namespace Volo.Abp.Uow.EntityFrameworkCore dbContext.Database.SetCommandTimeout(unitOfWork.Options.Timeout.Value.TotalSeconds.To()); } + dbContext.ChangeTracker.CascadeDeleteTiming = CascadeTiming.OnSaveChanges; + dbContext.ChangeTracker.DeleteOrphansTiming = CascadeTiming.OnSaveChanges; return dbContext; } } 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 0059a39a11..013c3eb3c8 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 @@ -60,5 +60,27 @@ namespace Volo.Abp.TestApp.Testing douglas.Age.ShouldBe(42); } } + + [Fact] + public async Task Cascading_Entities_Should_Not_Be_Deleted_When_Soft_Deleting_Entities() + { + var douglas = await PersonRepository.GetAsync(TestDataBuilder.UserDouglasId); + douglas.Phones.ShouldNotBeEmpty(); + + await PersonRepository.DeleteAsync(douglas); + + 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(); + } + } } } From b23428eee0fb2cb8cd08213b5406bc7ed1349f47 Mon Sep 17 00:00:00 2001 From: maliming Date: Wed, 18 Mar 2020 10:05:42 +0800 Subject: [PATCH 2/3] Change CascadeDeleteTiming and DeleteOrphansTiming in AbpDbContext constructor. --- .../Volo/Abp/EntityFrameworkCore/AbpDbContext.cs | 3 +++ .../Abp/Uow/EntityFrameworkCore/UnitOfWorkDbContextProvider.cs | 2 -- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpDbContext.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpDbContext.cs index ba9cee70ee..2216fbc821 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpDbContext.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpDbContext.cs @@ -81,6 +81,9 @@ namespace Volo.Abp.EntityFrameworkCore protected AbpDbContext(DbContextOptions options) : base(options) { + ChangeTracker.CascadeDeleteTiming = CascadeTiming.OnSaveChanges; + ChangeTracker.DeleteOrphansTiming = CascadeTiming.OnSaveChanges; + GuidGenerator = SimpleGuidGenerator.Instance; EntityChangeEventHelper = NullEntityChangeEventHelper.Instance; EntityHistoryHelper = NullEntityHistoryHelper.Instance; diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Uow/EntityFrameworkCore/UnitOfWorkDbContextProvider.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Uow/EntityFrameworkCore/UnitOfWorkDbContextProvider.cs index 74cd8bb642..a2207b996a 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Uow/EntityFrameworkCore/UnitOfWorkDbContextProvider.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Uow/EntityFrameworkCore/UnitOfWorkDbContextProvider.cs @@ -61,8 +61,6 @@ namespace Volo.Abp.Uow.EntityFrameworkCore dbContext.Database.SetCommandTimeout(unitOfWork.Options.Timeout.Value.TotalSeconds.To()); } - dbContext.ChangeTracker.CascadeDeleteTiming = CascadeTiming.OnSaveChanges; - dbContext.ChangeTracker.DeleteOrphansTiming = CascadeTiming.OnSaveChanges; return dbContext; } } From 2993cfd5f26fc36dafaacd118ae3274459dab32a Mon Sep 17 00:00:00 2001 From: maliming Date: Wed, 18 Mar 2020 10:05:42 +0800 Subject: [PATCH 3/3] Revert "Change CascadeDeleteTiming and DeleteOrphansTiming in AbpDbContext constructor." This reverts commit b23428eee0fb2cb8cd08213b5406bc7ed1349f47. --- .../Volo/Abp/EntityFrameworkCore/AbpDbContext.cs | 3 --- .../Abp/Uow/EntityFrameworkCore/UnitOfWorkDbContextProvider.cs | 2 ++ 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpDbContext.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpDbContext.cs index 2216fbc821..ba9cee70ee 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpDbContext.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpDbContext.cs @@ -81,9 +81,6 @@ namespace Volo.Abp.EntityFrameworkCore protected AbpDbContext(DbContextOptions options) : base(options) { - ChangeTracker.CascadeDeleteTiming = CascadeTiming.OnSaveChanges; - ChangeTracker.DeleteOrphansTiming = CascadeTiming.OnSaveChanges; - GuidGenerator = SimpleGuidGenerator.Instance; EntityChangeEventHelper = NullEntityChangeEventHelper.Instance; EntityHistoryHelper = NullEntityHistoryHelper.Instance; diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Uow/EntityFrameworkCore/UnitOfWorkDbContextProvider.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Uow/EntityFrameworkCore/UnitOfWorkDbContextProvider.cs index a2207b996a..74cd8bb642 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Uow/EntityFrameworkCore/UnitOfWorkDbContextProvider.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Uow/EntityFrameworkCore/UnitOfWorkDbContextProvider.cs @@ -61,6 +61,8 @@ namespace Volo.Abp.Uow.EntityFrameworkCore dbContext.Database.SetCommandTimeout(unitOfWork.Options.Timeout.Value.TotalSeconds.To()); } + dbContext.ChangeTracker.CascadeDeleteTiming = CascadeTiming.OnSaveChanges; + dbContext.ChangeTracker.DeleteOrphansTiming = CascadeTiming.OnSaveChanges; return dbContext; } }