|
|
@ -268,7 +268,7 @@ public abstract class AbpDbContext<TDbContext> : DbContext, IAbpEfCoreDbContext, |
|
|
if (EntityChangeOptions.Value.PublishEntityUpdatedEventWhenNavigationChanges) |
|
|
if (EntityChangeOptions.Value.PublishEntityUpdatedEventWhenNavigationChanges) |
|
|
{ |
|
|
{ |
|
|
var ignoredEntity = EntityChangeOptions.Value.IgnoredNavigationEntitySelectors.Any(selector => selector.Predicate(entityEntry.Entity.GetType())); |
|
|
var ignoredEntity = EntityChangeOptions.Value.IgnoredNavigationEntitySelectors.Any(selector => selector.Predicate(entityEntry.Entity.GetType())); |
|
|
var onlyForeignKeyModifiedEntity = entityEntry.State == EntityState.Modified && entityEntry.Properties.Where(x => x.IsModified).All(x => x.Metadata.IsForeignKey() && (x.CurrentValue == null || x.OriginalValue?.ToString() == x.CurrentValue?.ToString())); |
|
|
var onlyForeignKeyModifiedEntity = entityEntry.State == EntityState.Modified && IsOnlyForeignKeysDeleted(entityEntry); |
|
|
if ((entityEntry.State == EntityState.Unchanged && ignoredEntity) || onlyForeignKeyModifiedEntity && ignoredEntity) |
|
|
if ((entityEntry.State == EntityState.Unchanged && ignoredEntity) || onlyForeignKeyModifiedEntity && ignoredEntity) |
|
|
{ |
|
|
{ |
|
|
continue; |
|
|
continue; |
|
|
@ -292,7 +292,7 @@ public abstract class AbpDbContext<TDbContext> : DbContext, IAbpEfCoreDbContext, |
|
|
} |
|
|
} |
|
|
else if (entityEntry.Properties.Any(x => x.IsModified && (x.Metadata.ValueGenerated == ValueGenerated.Never || x.Metadata.ValueGenerated == ValueGenerated.OnAdd))) |
|
|
else if (entityEntry.Properties.Any(x => x.IsModified && (x.Metadata.ValueGenerated == ValueGenerated.Never || x.Metadata.ValueGenerated == ValueGenerated.OnAdd))) |
|
|
{ |
|
|
{ |
|
|
if (entityEntry.Properties.Where(x => x.IsModified).All(x => x.Metadata.IsForeignKey() && (x.CurrentValue == null || x.OriginalValue?.ToString() == x.CurrentValue?.ToString()))) |
|
|
if (IsOnlyForeignKeysDeleted(entityEntry)) |
|
|
{ |
|
|
{ |
|
|
// Skip `PublishEntityDeletedEvent/PublishEntityUpdatedEvent` if only foreign keys have changed.
|
|
|
// Skip `PublishEntityDeletedEvent/PublishEntityUpdatedEvent` if only foreign keys have changed.
|
|
|
break; |
|
|
break; |
|
|
@ -428,8 +428,7 @@ public abstract class AbpDbContext<TDbContext> : DbContext, IAbpEfCoreDbContext, |
|
|
case EntityState.Modified: |
|
|
case EntityState.Modified: |
|
|
if (entry.Properties.Any(x => x.IsModified && (x.Metadata.ValueGenerated == ValueGenerated.Never || x.Metadata.ValueGenerated == ValueGenerated.OnAdd))) |
|
|
if (entry.Properties.Any(x => x.IsModified && (x.Metadata.ValueGenerated == ValueGenerated.Never || x.Metadata.ValueGenerated == ValueGenerated.OnAdd))) |
|
|
{ |
|
|
{ |
|
|
var modifiedProperties = entry.Properties.Where(x => x.IsModified).ToList(); |
|
|
if (IsOnlyForeignKeysDeleted(entry)) |
|
|
if (modifiedProperties.All(x => x.Metadata.IsForeignKey() && (x.CurrentValue == null || x.OriginalValue?.ToString() == x.CurrentValue?.ToString()))) |
|
|
|
|
|
{ |
|
|
{ |
|
|
// Skip `PublishEntityDeletedEvent/PublishEntityUpdatedEvent` if only foreign keys have changed.
|
|
|
// Skip `PublishEntityDeletedEvent/PublishEntityUpdatedEvent` if only foreign keys have changed.
|
|
|
break; |
|
|
break; |
|
|
@ -473,6 +472,12 @@ public abstract class AbpDbContext<TDbContext> : DbContext, IAbpEfCoreDbContext, |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
protected virtual bool IsOnlyForeignKeysDeleted(EntityEntry entry) |
|
|
|
|
|
{ |
|
|
|
|
|
return entry.Properties.All(x => x.IsModified && x.Metadata.IsForeignKey() && |
|
|
|
|
|
(x.CurrentValue == null || x.OriginalValue?.ToString() == x.CurrentValue?.ToString())); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
protected virtual void HandlePropertiesBeforeSave() |
|
|
protected virtual void HandlePropertiesBeforeSave() |
|
|
{ |
|
|
{ |
|
|
var entries = ChangeTracker.Entries().ToList(); |
|
|
var entries = ChangeTracker.Entries().ToList(); |
|
|
|