From bee6450f15acf772ad1a12952e070f49eee681b7 Mon Sep 17 00:00:00 2001 From: maliming Date: Mon, 8 Jan 2024 19:48:54 +0800 Subject: [PATCH] Refactor `EntityHistoryHelper `. Related to https://github.com/abpframework/abp/pull/18715 --- .../EntityHistory/EntityHistoryHelper.cs | 29 +++++++------------ 1 file changed, 11 insertions(+), 18 deletions(-) diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/EntityHistory/EntityHistoryHelper.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/EntityHistory/EntityHistoryHelper.cs index a664971057..5229e9aab6 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/EntityHistory/EntityHistoryHelper.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/EntityHistory/EntityHistoryHelper.cs @@ -85,7 +85,7 @@ public class EntityHistoryHelper : IEntityHistoryHelper, ITransientDependency case EntityState.Modified: changeType = IsDeleted(entityEntry) ? EntityChangeType.Deleted : EntityChangeType.Updated; break; - case EntityState.Unchanged when Options.SaveEntityHistoryWhenNavigationChanges: + case EntityState.Unchanged when HasNavigationPropertiesChanged(entityEntry): changeType = EntityChangeType.Updated; // Navigation property changes. break; case EntityState.Detached: @@ -227,21 +227,6 @@ public class EntityHistoryHelper : IEntityHistoryHelper, ITransientDependency return false; } - if (Options.SaveEntityHistoryWhenNavigationChanges && entityEntry.State == EntityState.Unchanged) - { - if (entityEntry.Navigations.Any(navigationEntry => navigationEntry.IsModified)) - { - return true; - } - - if (entityEntry.Navigations.Where(x => x is ReferenceEntry).Cast().Any(x => x.TargetEntry != null && x.TargetEntry.State == EntityState.Modified)) - { - return true; - } - - return false; - } - var entityType = entityEntry.Metadata.ClrType; if (!EntityHelper.IsEntity(entityType) && !EntityHelper.IsValueObject(entityType)) @@ -249,12 +234,20 @@ public class EntityHistoryHelper : IEntityHistoryHelper, ITransientDependency return false; } - if (AuditingHelper.IsEntityHistoryEnabled(entityType)) + var isEntityHistoryEnabled = AuditingHelper.IsEntityHistoryEnabled(entityType); + if (isEntityHistoryEnabled && HasNavigationPropertiesChanged(entityEntry)) { return true; } - return defaultValue; + return isEntityHistoryEnabled || defaultValue; + } + + protected virtual bool HasNavigationPropertiesChanged(EntityEntry entityEntry) + { + return Options.SaveEntityHistoryWhenNavigationChanges && entityEntry.State == EntityState.Unchanged && + (entityEntry.Navigations.Any(navigationEntry => navigationEntry.IsModified) || + entityEntry.Navigations.Where(x => x is ReferenceEntry).Cast().Any(x => x.TargetEntry != null && x.TargetEntry.State == EntityState.Modified)); } protected virtual bool ShouldSavePropertyHistory(PropertyEntry propertyEntry, bool defaultValue)