Since EF Core 3 the delete-behaviour changed. I want to implement soft delete, and I thought this might be helpful...
I have lazy loading enabled and a generic delete method:
this.context.Set<TEntity>().Remove(entity);
Before SaveChanges
I add meta information.
First I try to find all ChangeTracker
entries like this:
var entityEntries = dbContext.ChangeTracker.Entries()
.Where(x => x.Entity is IMyMetaDataBase
&& (x.State == EntityState.Added
|| x.State == EntityState.Modified
|| x.State == EntityState.Deleted));
But I only find the principal entity in above collection to perform soft delete like this:
if (entityEntry.Entity is IMyDeletableInterface deletable && entityEntry.State == EntityState.Deleted)
{
EntityEntry.State = EntityState.Modified;
deletable.Deleted = true;
}
If I set the EntityState
modified (which is the thing to do I suppose) the principal entity is set deleted, but all dependent entities remain unchanged. If I don´t change the EntityState
, all dependent entities will be removed.
My main question: Is there a way to find the entities, EF will remove in cascade operation..?
netcoreapp3.1, ef core 3.1.8
Something like this would help.