diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/Clients/ClientRepository.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/Clients/ClientRepository.cs index 5b350d0365..1c7a0ccccb 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/Clients/ClientRepository.cs +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/Clients/ClientRepository.cs @@ -53,6 +53,56 @@ namespace Volo.Abp.IdentityServer.Clients return await DbSet.AnyAsync(c => c.Id != expectedId && c.ClientId == clientId, cancellationToken: cancellationToken); } + public override async Task DeleteAsync(Guid id, bool autoSave = false, CancellationToken cancellationToken = default) + { + foreach (var clientGrantType in DbContext.Set().Where(x => x.ClientId == id)) + { + DbContext.Set().Remove(clientGrantType); + } + + foreach (var clientRedirectUri in DbContext.Set().Where(x => x.ClientId == id)) + { + DbContext.Set().Remove(clientRedirectUri); + } + + foreach (var clientPostLogoutRedirectUri in DbContext.Set().Where(x => x.ClientId == id)) + { + DbContext.Set().Remove(clientPostLogoutRedirectUri); + } + + foreach (var clientScope in DbContext.Set().Where(x => x.ClientId == id)) + { + DbContext.Set().Remove(clientScope); + } + + foreach (var clientSecret in DbContext.Set().Where(x => x.ClientId == id)) + { + DbContext.Set().Remove(clientSecret); + } + + foreach (var clientClaim in DbContext.Set().Where(x => x.ClientId == id)) + { + DbContext.Set().Remove(clientClaim); + } + + foreach (var clientIdPRestriction in DbContext.Set().Where(x => x.ClientId == id)) + { + DbContext.Set().Remove(clientIdPRestriction); + } + + foreach (var clientCorsOrigin in DbContext.Set().Where(x => x.ClientId == id)) + { + DbContext.Set().Remove(clientCorsOrigin); + } + + foreach (var clientProperty in DbContext.Set().Where(x => x.ClientId == id)) + { + DbContext.Set().Remove(clientProperty); + } + + await base.DeleteAsync(id, autoSave, cancellationToken); + } + public override IQueryable WithDetails() { return GetQueryable().IncludeDetails();