Browse Source

Cascading entities should not be deleted when soft deleting entities.

pull/2971/head
maliming 7 years ago
parent
commit
01d1b65cbd
  1. 3
      framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Uow/EntityFrameworkCore/UnitOfWorkDbContextProvider.cs
  2. 22
      framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/SoftDelete_Tests.cs

3
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<int>());
}
dbContext.ChangeTracker.CascadeDeleteTiming = CascadeTiming.OnSaveChanges;
dbContext.ChangeTracker.DeleteOrphansTiming = CascadeTiming.OnSaveChanges;
return dbContext;
}
}

22
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<ISoftDelete>())
{
douglas = await PersonRepository.FindAsync(TestDataBuilder.UserDouglasId);
douglas.ShouldNotBeNull();
douglas.IsDeleted.ShouldBeTrue();
douglas.DeletionTime.ShouldNotBeNull();
douglas.Phones.ShouldNotBeEmpty();
}
}
}
}

Loading…
Cancel
Save