Browse Source

Merge pull request #18718 from abpframework/HasNavigationPropertiesChanged

Refactor `EntityHistoryHelper `.
pull/18719/head
liangshiwei 3 years ago
committed by GitHub
parent
commit
7dfe96d645
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 29
      framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/EntityHistory/EntityHistoryHelper.cs

29
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<ReferenceEntry>().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<ReferenceEntry>().Any(x => x.TargetEntry != null && x.TargetEntry.State == EntityState.Modified));
}
protected virtual bool ShouldSavePropertyHistory(PropertyEntry propertyEntry, bool defaultValue)

Loading…
Cancel
Save