Browse Source

Merge pull request #16738 from abpframework/IOpenIddictDbConcurrencyExceptionHandler

Add `IOpenIddictDbConcurrencyExceptionHandler`
pull/16749/head
liangshiwei 3 years ago
committed by GitHub
parent
commit
fc4a18ce01
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 4
      modules/openiddict/src/Volo.Abp.OpenIddict.Domain/Volo/Abp/OpenIddict/AbpOpenIddictStoreBase.cs
  2. 7
      modules/openiddict/src/Volo.Abp.OpenIddict.Domain/Volo/Abp/OpenIddict/Applications/AbpOpenIddictApplicationStore.cs
  3. 7
      modules/openiddict/src/Volo.Abp.OpenIddict.Domain/Volo/Abp/OpenIddict/Authorizations/AbpOpenIddictAuthorizationStore.cs
  4. 9
      modules/openiddict/src/Volo.Abp.OpenIddict.Domain/Volo/Abp/OpenIddict/IOpenIddictDbConcurrencyExceptionHandler.cs
  5. 7
      modules/openiddict/src/Volo.Abp.OpenIddict.Domain/Volo/Abp/OpenIddict/Scopes/AbpOpenIddictScopeStore.cs
  6. 7
      modules/openiddict/src/Volo.Abp.OpenIddict.Domain/Volo/Abp/OpenIddict/Tokens/AbpOpenIddictTokenStore.cs
  7. 24
      modules/openiddict/src/Volo.Abp.OpenIddict.EntityFrameworkCore/Volo/Abp/OpenIddict/EfCoreOpenIddictDbConcurrencyExceptionHandler.cs
  8. 13
      modules/openiddict/src/Volo.Abp.OpenIddict.MongoDB/Volo/Abp/OpenIddict/MongoOpenIddictDbConcurrencyExceptionHandler.cs

4
modules/openiddict/src/Volo.Abp.OpenIddict.Domain/Volo/Abp/OpenIddict/AbpOpenIddictStoreBase.cs

@ -21,13 +21,15 @@ public abstract class AbpOpenIddictStoreBase<TRepository>
protected IUnitOfWorkManager UnitOfWorkManager { get; }
protected IGuidGenerator GuidGenerator { get; }
protected AbpOpenIddictIdentifierConverter IdentifierConverter { get; }
protected IOpenIddictDbConcurrencyExceptionHandler ConcurrencyExceptionHandler { get; }
protected AbpOpenIddictStoreBase(TRepository repository, IUnitOfWorkManager unitOfWorkManager, IGuidGenerator guidGenerator, AbpOpenIddictIdentifierConverter identifierConverter)
protected AbpOpenIddictStoreBase(TRepository repository, IUnitOfWorkManager unitOfWorkManager, IGuidGenerator guidGenerator, AbpOpenIddictIdentifierConverter identifierConverter, IOpenIddictDbConcurrencyExceptionHandler concurrencyExceptionHandler)
{
Repository = repository;
UnitOfWorkManager = unitOfWorkManager;
GuidGenerator = guidGenerator;
IdentifierConverter = identifierConverter;
ConcurrencyExceptionHandler = concurrencyExceptionHandler;
Logger = NullLogger<AbpOpenIddictStoreBase<TRepository>>.Instance;
}

7
modules/openiddict/src/Volo.Abp.OpenIddict.Domain/Volo/Abp/OpenIddict/Applications/AbpOpenIddictApplicationStore.cs

@ -26,8 +26,9 @@ public class AbpOpenIddictApplicationStore : AbpOpenIddictStoreBase<IOpenIddictA
IUnitOfWorkManager unitOfWorkManager,
IOpenIddictTokenRepository tokenRepository,
IGuidGenerator guidGenerator,
AbpOpenIddictIdentifierConverter identifierConverter)
: base(repository, unitOfWorkManager, guidGenerator, identifierConverter)
AbpOpenIddictIdentifierConverter identifierConverter,
IOpenIddictDbConcurrencyExceptionHandler concurrencyExceptionHandler)
: base(repository, unitOfWorkManager, guidGenerator, identifierConverter, concurrencyExceptionHandler)
{
TokenRepository = tokenRepository;
}
@ -69,6 +70,7 @@ public class AbpOpenIddictApplicationStore : AbpOpenIddictStoreBase<IOpenIddictA
catch (AbpDbConcurrencyException e)
{
Logger.LogException(e);
await ConcurrencyExceptionHandler.HandleAsync(e);
throw new OpenIddictExceptions.ConcurrencyException(e.Message, e.InnerException);
}
}
@ -545,6 +547,7 @@ public class AbpOpenIddictApplicationStore : AbpOpenIddictStoreBase<IOpenIddictA
catch (AbpDbConcurrencyException e)
{
Logger.LogException(e);
await ConcurrencyExceptionHandler.HandleAsync(e);
throw new OpenIddictExceptions.ConcurrencyException(e.Message, e.InnerException);
}

7
modules/openiddict/src/Volo.Abp.OpenIddict.Domain/Volo/Abp/OpenIddict/Authorizations/AbpOpenIddictAuthorizationStore.cs

@ -28,8 +28,9 @@ public class AbpOpenIddictAuthorizationStore : AbpOpenIddictStoreBase<IOpenIddic
IGuidGenerator guidGenerator,
IOpenIddictApplicationRepository applicationRepository,
IOpenIddictTokenRepository tokenRepository,
AbpOpenIddictIdentifierConverter identifierConverter)
: base(repository, unitOfWorkManager, guidGenerator, identifierConverter)
AbpOpenIddictIdentifierConverter identifierConverter,
IOpenIddictDbConcurrencyExceptionHandler concurrencyExceptionHandler)
: base(repository, unitOfWorkManager, guidGenerator, identifierConverter, concurrencyExceptionHandler)
{
ApplicationRepository = applicationRepository;
TokenRepository = tokenRepository;
@ -72,6 +73,7 @@ public class AbpOpenIddictAuthorizationStore : AbpOpenIddictStoreBase<IOpenIddic
catch (AbpDbConcurrencyException e)
{
Logger.LogException(e);
await ConcurrencyExceptionHandler.HandleAsync(e);
throw new OpenIddictExceptions.ConcurrencyException(e.Message, e.InnerException);
}
}
@ -404,6 +406,7 @@ public class AbpOpenIddictAuthorizationStore : AbpOpenIddictStoreBase<IOpenIddic
catch (AbpDbConcurrencyException e)
{
Logger.LogException(e);
await ConcurrencyExceptionHandler.HandleAsync(e);
throw new OpenIddictExceptions.ConcurrencyException(e.Message, e.InnerException);
}

9
modules/openiddict/src/Volo.Abp.OpenIddict.Domain/Volo/Abp/OpenIddict/IOpenIddictDbConcurrencyExceptionHandler.cs

@ -0,0 +1,9 @@
using System.Threading.Tasks;
using Volo.Abp.Data;
namespace Volo.Abp.OpenIddict;
public interface IOpenIddictDbConcurrencyExceptionHandler
{
Task HandleAsync(AbpDbConcurrencyException exception);
}

7
modules/openiddict/src/Volo.Abp.OpenIddict.Domain/Volo/Abp/OpenIddict/Scopes/AbpOpenIddictScopeStore.cs

@ -21,8 +21,9 @@ public class AbpOpenIddictScopeStore : AbpOpenIddictStoreBase<IOpenIddictScopeRe
IOpenIddictScopeRepository repository,
IUnitOfWorkManager unitOfWorkManager,
IGuidGenerator guidGenerator,
AbpOpenIddictIdentifierConverter identifierConverter)
: base(repository, unitOfWorkManager, guidGenerator, identifierConverter)
AbpOpenIddictIdentifierConverter identifierConverter,
IOpenIddictDbConcurrencyExceptionHandler concurrencyExceptionHandler)
: base(repository, unitOfWorkManager, guidGenerator, identifierConverter, concurrencyExceptionHandler)
{
}
@ -57,6 +58,7 @@ public class AbpOpenIddictScopeStore : AbpOpenIddictStoreBase<IOpenIddictScopeRe
catch (AbpDbConcurrencyException e)
{
Logger.LogException(e);
await ConcurrencyExceptionHandler.HandleAsync(e);
throw new OpenIddictExceptions.ConcurrencyException(e.Message, e.InnerException);
}
}
@ -402,6 +404,7 @@ public class AbpOpenIddictScopeStore : AbpOpenIddictStoreBase<IOpenIddictScopeRe
catch (AbpDbConcurrencyException e)
{
Logger.LogException(e);
await ConcurrencyExceptionHandler.HandleAsync(e);
throw new OpenIddictExceptions.ConcurrencyException(e.Message, e.InnerException);
}

7
modules/openiddict/src/Volo.Abp.OpenIddict.Domain/Volo/Abp/OpenIddict/Tokens/AbpOpenIddictTokenStore.cs

@ -28,8 +28,9 @@ public class AbpOpenIddictTokenStore : AbpOpenIddictStoreBase<IOpenIddictTokenRe
IGuidGenerator guidGenerator,
IOpenIddictApplicationRepository applicationRepository,
IOpenIddictAuthorizationRepository authorizationRepository,
AbpOpenIddictIdentifierConverter identifierConverter)
: base(repository, unitOfWorkManager, guidGenerator, identifierConverter)
AbpOpenIddictIdentifierConverter identifierConverter,
IOpenIddictDbConcurrencyExceptionHandler concurrencyExceptionHandler)
: base(repository, unitOfWorkManager, guidGenerator, identifierConverter, concurrencyExceptionHandler)
{
ApplicationRepository = applicationRepository;
AuthorizationRepository = authorizationRepository;
@ -65,6 +66,7 @@ public class AbpOpenIddictTokenStore : AbpOpenIddictStoreBase<IOpenIddictTokenRe
catch (AbpDbConcurrencyException e)
{
Logger.LogException(e);
await ConcurrencyExceptionHandler.HandleAsync(e);
throw new OpenIddictExceptions.ConcurrencyException(e.Message, e.InnerException);
}
}
@ -449,6 +451,7 @@ public class AbpOpenIddictTokenStore : AbpOpenIddictStoreBase<IOpenIddictTokenRe
catch (AbpDbConcurrencyException e)
{
Logger.LogException(e);
await ConcurrencyExceptionHandler.HandleAsync(e);
throw new OpenIddictExceptions.ConcurrencyException(e.Message, e.InnerException);
}

24
modules/openiddict/src/Volo.Abp.OpenIddict.EntityFrameworkCore/Volo/Abp/OpenIddict/EfCoreOpenIddictDbConcurrencyExceptionHandler.cs

@ -0,0 +1,24 @@
using System.Threading.Tasks;
using Microsoft.EntityFrameworkCore;
using Volo.Abp.Data;
using Volo.Abp.DependencyInjection;
namespace Volo.Abp.OpenIddict;
public class EfCoreOpenIddictDbConcurrencyExceptionHandler : IOpenIddictDbConcurrencyExceptionHandler, ITransientDependency
{
public virtual Task HandleAsync(AbpDbConcurrencyException exception)
{
if (exception != null &&
exception.InnerException is DbUpdateConcurrencyException updateConcurrencyException)
{
foreach (var entry in updateConcurrencyException.Entries)
{
// Reset the state of the entity to prevents future calls to SaveChangesAsync() from failing.
entry.State = EntityState.Unchanged;
}
}
return Task.CompletedTask;
}
}

13
modules/openiddict/src/Volo.Abp.OpenIddict.MongoDB/Volo/Abp/OpenIddict/MongoOpenIddictDbConcurrencyExceptionHandler.cs

@ -0,0 +1,13 @@
using System.Threading.Tasks;
using Volo.Abp.Data;
using Volo.Abp.DependencyInjection;
namespace Volo.Abp.OpenIddict;
public class MongoOpenIddictDbConcurrencyExceptionHandler: IOpenIddictDbConcurrencyExceptionHandler, ITransientDependency
{
public virtual Task HandleAsync(AbpDbConcurrencyException exception)
{
return Task.CompletedTask;
}
}
Loading…
Cancel
Save