feat: Implementiere kaskadierende Löschung für die User-Entität im UserRepository
- Überriding der DeleteAsync-Methode hinzugefügt, um verwandte ModuleOfUser- und GroupOfUser-Entitäten zu behandeln. - Sicherstellung der Entfernung verwandter Datensätze bei der Löschung eines Benutzers. - TODO-Kommentar hinzugefügt, um zu empfehlen, .OnDelete(DeleteBehavior.ClientCascade) im DbContext für ein verbessertes Verhalten zu verwenden.
This commit is contained in:
parent
ae14f5842e
commit
622cb1f702
@ -32,4 +32,19 @@ namespace DigitalData.UserManager.Infrastructure
|
||||
return modelBuilder;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//TODO: DeleteBehavior.Restrict (see example comment below) is not working, probably due to table relationships. Because it tries to delete, for example, User first and then GroupOfUser. However, since GroupOfUser is not deleted while Users is deleted, the error is thrown because of the table relationship. Apply this approach after finding the solution.
|
||||
/*
|
||||
modelBuilder.Entity<User>()
|
||||
.HasMany<GroupOfUser>()
|
||||
.WithOne(gou => gou.User)
|
||||
.HasForeignKey(gou => gou.UserId)
|
||||
.OnDelete(DeleteBehavior.ClientCascade);
|
||||
|
||||
modelBuilder.Entity<User>()
|
||||
.HasMany<ModuleOfUser>()
|
||||
.WithOne(mou => mou.User)
|
||||
.HasForeignKey(mou => mou.UserId)
|
||||
.OnDelete(DeleteBehavior.ClientCascade);
|
||||
*/
|
||||
@ -44,5 +44,19 @@ namespace DigitalData.UserManager.Infrastructure.Repositories
|
||||
{
|
||||
return await _dbSet.Where(user => user.Username == username).FirstOrDefaultAsync();
|
||||
}
|
||||
|
||||
//TODO: instead of this implmenet .OnDelete(DeleteBehavior.ClientCascade) in DbContext
|
||||
public override async Task<bool> DeleteAsync(User user)
|
||||
{
|
||||
IEnumerable<ModuleOfUser> mou = await _moduleOfUserRepo.ReadByUserAsync(user.Username);
|
||||
if(mou.Any())
|
||||
_dbContext.RemoveRange(mou);
|
||||
|
||||
IEnumerable<GroupOfUser> gou = await _groupOfUserRepo.ReadByUsernameAsync(user.Username);
|
||||
if(gou.Any())
|
||||
_dbContext.RemoveRange(gou);
|
||||
|
||||
return await base.DeleteAsync(user);
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user