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 6a5b608c76..2575126fd5 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpDbContext.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpDbContext.cs @@ -277,7 +277,19 @@ public abstract class AbpDbContext : DbContext, IAbpEfCoreDbContext, finally { ChangeTracker.AutoDetectChangesEnabled = true; - AbpEfCoreNavigationHelper.RemoveChangedEntityEntries(); + AbpEfCoreNavigationHelper.ResetChangedFlags(); + if (UnitOfWorkManager.Current != null) + { + UnitOfWorkManager.Current.OnCompleted(() => + { + AbpEfCoreNavigationHelper.Clear(); + return Task.CompletedTask; + }); + } + else + { + AbpEfCoreNavigationHelper.Clear(); + } } } diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/ChangeTrackers/AbpEfCoreNavigationHelper.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/ChangeTrackers/AbpEfCoreNavigationHelper.cs index 39835569cb..077ff21d2b 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/ChangeTrackers/AbpEfCoreNavigationHelper.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/ChangeTrackers/AbpEfCoreNavigationHelper.cs @@ -222,9 +222,19 @@ public class AbpEfCoreNavigationHelper : ITransientDependency return null; } - public virtual void RemoveChangedEntityEntries() + public virtual void ResetChangedFlags() { - EntityEntries.RemoveAll(x => x.Value.IsModified); + foreach (var entry in EntityEntries.Values) + { + if (entry.IsModified) + { + entry.IsModified = false; + foreach (var navigation in entry.NavigationEntries) + { + navigation.IsModified = false; + } + } + } } public virtual void Clear()