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 c4bd75cca2..c471d89acf 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpDbContext.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpDbContext.cs @@ -614,7 +614,19 @@ public abstract class AbpDbContext : DbContext, IAbpEfCoreDbContext, return; } + ExtraPropertyDictionary? originalExtraProperties = null; + if (entry.Entity is IHasExtraProperties) + { + originalExtraProperties = entry.OriginalValues.GetValue(nameof(IHasExtraProperties.ExtraProperties)); + } + entry.Reload(); + + if (entry.Entity is IHasExtraProperties) + { + ObjectHelper.TrySetProperty(entry.Entity.As(), x => x.ExtraProperties, () => originalExtraProperties); + } + ObjectHelper.TrySetProperty(entry.Entity.As(), x => x.IsDeleted, () => true); SetDeletionAuditProperties(entry); } diff --git a/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/Domain/ExtraProperties_Tests.cs b/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/Domain/ExtraProperties_Tests.cs index 42b6ca2a67..59eaa367fa 100644 --- a/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/Domain/ExtraProperties_Tests.cs +++ b/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/Domain/ExtraProperties_Tests.cs @@ -1,6 +1,7 @@ using System; using System.Linq; using System.Threading.Tasks; +using Microsoft.Extensions.DependencyInjection; using Shouldly; using Volo.Abp.Data; using Volo.Abp.Domain.Repositories; @@ -59,6 +60,27 @@ public class ExtraProperties_Tests : ExtraProperties_Tests("PhoneCode").ShouldBe("42"); + + await CityRepository.DeleteAsync(london); + + london = await CityRepository.FindByNameAsync("London"); + london.ShouldBeNull(); + + using (var uow = ServiceProvider.GetRequiredService().Disable()) + { + london = await CityRepository.FindByNameAsync("London"); + london.IsDeleted.ShouldBeTrue(); + london.HasProperty("PhoneCode").ShouldBeTrue(); + london.GetProperty("PhoneCode").ShouldBe("42"); + } + } + public enum Color { Red = 0, diff --git a/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Domain/City.cs b/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Domain/City.cs index 15ca147d91..50c3d32458 100644 --- a/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Domain/City.cs +++ b/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Domain/City.cs @@ -5,12 +5,14 @@ using Volo.Abp.Domain.Entities; namespace Volo.Abp.TestApp.Domain; -public class City : AggregateRoot +public class City : AggregateRoot, ISoftDelete { public string Name { get; set; } public ICollection Districts { get; set; } + public bool IsDeleted { get; set; } + private City() { diff --git a/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/ConcurrencyStamp_Tests.cs b/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/ConcurrencyStamp_Tests.cs index 2f9f8c1257..2906431ff1 100644 --- a/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/ConcurrencyStamp_Tests.cs +++ b/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/ConcurrencyStamp_Tests.cs @@ -1,5 +1,6 @@ using System.Threading.Tasks; using Volo.Abp.Data; +using Volo.Abp.Domain.Repositories; using Volo.Abp.Modularity; using Volo.Abp.TestApp.Domain; using Xunit; @@ -49,7 +50,7 @@ public abstract class ConcurrencyStamp_Tests : TestAppTestBase(async () => { - await CityRepository.DeleteAsync(london1); + await CityRepository.HardDeleteAsync(london1); }); } }