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 IUnitOfWorkManager UnitOfWorkManager { get; }
protected IGuidGenerator GuidGenerator { get; } protected IGuidGenerator GuidGenerator { get; }
protected AbpOpenIddictIdentifierConverter IdentifierConverter { 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; Repository = repository;
UnitOfWorkManager = unitOfWorkManager; UnitOfWorkManager = unitOfWorkManager;
GuidGenerator = guidGenerator; GuidGenerator = guidGenerator;
IdentifierConverter = identifierConverter; IdentifierConverter = identifierConverter;
ConcurrencyExceptionHandler = concurrencyExceptionHandler;
Logger = NullLogger<AbpOpenIddictStoreBase<TRepository>>.Instance; 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, IUnitOfWorkManager unitOfWorkManager,
IOpenIddictTokenRepository tokenRepository, IOpenIddictTokenRepository tokenRepository,
IGuidGenerator guidGenerator, IGuidGenerator guidGenerator,
AbpOpenIddictIdentifierConverter identifierConverter) AbpOpenIddictIdentifierConverter identifierConverter,
: base(repository, unitOfWorkManager, guidGenerator, identifierConverter) IOpenIddictDbConcurrencyExceptionHandler concurrencyExceptionHandler)
: base(repository, unitOfWorkManager, guidGenerator, identifierConverter, concurrencyExceptionHandler)
{ {
TokenRepository = tokenRepository; TokenRepository = tokenRepository;
} }
@ -69,6 +70,7 @@ public class AbpOpenIddictApplicationStore : AbpOpenIddictStoreBase<IOpenIddictA
catch (AbpDbConcurrencyException e) catch (AbpDbConcurrencyException e)
{ {
Logger.LogException(e); Logger.LogException(e);
await ConcurrencyExceptionHandler.HandleAsync(e);
throw new OpenIddictExceptions.ConcurrencyException(e.Message, e.InnerException); throw new OpenIddictExceptions.ConcurrencyException(e.Message, e.InnerException);
} }
} }
@ -545,6 +547,7 @@ public class AbpOpenIddictApplicationStore : AbpOpenIddictStoreBase<IOpenIddictA
catch (AbpDbConcurrencyException e) catch (AbpDbConcurrencyException e)
{ {
Logger.LogException(e); Logger.LogException(e);
await ConcurrencyExceptionHandler.HandleAsync(e);
throw new OpenIddictExceptions.ConcurrencyException(e.Message, e.InnerException); 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, IGuidGenerator guidGenerator,
IOpenIddictApplicationRepository applicationRepository, IOpenIddictApplicationRepository applicationRepository,
IOpenIddictTokenRepository tokenRepository, IOpenIddictTokenRepository tokenRepository,
AbpOpenIddictIdentifierConverter identifierConverter) AbpOpenIddictIdentifierConverter identifierConverter,
: base(repository, unitOfWorkManager, guidGenerator, identifierConverter) IOpenIddictDbConcurrencyExceptionHandler concurrencyExceptionHandler)
: base(repository, unitOfWorkManager, guidGenerator, identifierConverter, concurrencyExceptionHandler)
{ {
ApplicationRepository = applicationRepository; ApplicationRepository = applicationRepository;
TokenRepository = tokenRepository; TokenRepository = tokenRepository;
@ -72,6 +73,7 @@ public class AbpOpenIddictAuthorizationStore : AbpOpenIddictStoreBase<IOpenIddic
catch (AbpDbConcurrencyException e) catch (AbpDbConcurrencyException e)
{ {
Logger.LogException(e); Logger.LogException(e);
await ConcurrencyExceptionHandler.HandleAsync(e);
throw new OpenIddictExceptions.ConcurrencyException(e.Message, e.InnerException); throw new OpenIddictExceptions.ConcurrencyException(e.Message, e.InnerException);
} }
} }
@ -404,6 +406,7 @@ public class AbpOpenIddictAuthorizationStore : AbpOpenIddictStoreBase<IOpenIddic
catch (AbpDbConcurrencyException e) catch (AbpDbConcurrencyException e)
{ {
Logger.LogException(e); Logger.LogException(e);
await ConcurrencyExceptionHandler.HandleAsync(e);
throw new OpenIddictExceptions.ConcurrencyException(e.Message, e.InnerException); 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, IOpenIddictScopeRepository repository,
IUnitOfWorkManager unitOfWorkManager, IUnitOfWorkManager unitOfWorkManager,
IGuidGenerator guidGenerator, IGuidGenerator guidGenerator,
AbpOpenIddictIdentifierConverter identifierConverter) AbpOpenIddictIdentifierConverter identifierConverter,
: base(repository, unitOfWorkManager, guidGenerator, identifierConverter) IOpenIddictDbConcurrencyExceptionHandler concurrencyExceptionHandler)
: base(repository, unitOfWorkManager, guidGenerator, identifierConverter, concurrencyExceptionHandler)
{ {
} }
@ -57,6 +58,7 @@ public class AbpOpenIddictScopeStore : AbpOpenIddictStoreBase<IOpenIddictScopeRe
catch (AbpDbConcurrencyException e) catch (AbpDbConcurrencyException e)
{ {
Logger.LogException(e); Logger.LogException(e);
await ConcurrencyExceptionHandler.HandleAsync(e);
throw new OpenIddictExceptions.ConcurrencyException(e.Message, e.InnerException); throw new OpenIddictExceptions.ConcurrencyException(e.Message, e.InnerException);
} }
} }
@ -402,6 +404,7 @@ public class AbpOpenIddictScopeStore : AbpOpenIddictStoreBase<IOpenIddictScopeRe
catch (AbpDbConcurrencyException e) catch (AbpDbConcurrencyException e)
{ {
Logger.LogException(e); Logger.LogException(e);
await ConcurrencyExceptionHandler.HandleAsync(e);
throw new OpenIddictExceptions.ConcurrencyException(e.Message, e.InnerException); 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, IGuidGenerator guidGenerator,
IOpenIddictApplicationRepository applicationRepository, IOpenIddictApplicationRepository applicationRepository,
IOpenIddictAuthorizationRepository authorizationRepository, IOpenIddictAuthorizationRepository authorizationRepository,
AbpOpenIddictIdentifierConverter identifierConverter) AbpOpenIddictIdentifierConverter identifierConverter,
: base(repository, unitOfWorkManager, guidGenerator, identifierConverter) IOpenIddictDbConcurrencyExceptionHandler concurrencyExceptionHandler)
: base(repository, unitOfWorkManager, guidGenerator, identifierConverter, concurrencyExceptionHandler)
{ {
ApplicationRepository = applicationRepository; ApplicationRepository = applicationRepository;
AuthorizationRepository = authorizationRepository; AuthorizationRepository = authorizationRepository;
@ -65,6 +66,7 @@ public class AbpOpenIddictTokenStore : AbpOpenIddictStoreBase<IOpenIddictTokenRe
catch (AbpDbConcurrencyException e) catch (AbpDbConcurrencyException e)
{ {
Logger.LogException(e); Logger.LogException(e);
await ConcurrencyExceptionHandler.HandleAsync(e);
throw new OpenIddictExceptions.ConcurrencyException(e.Message, e.InnerException); throw new OpenIddictExceptions.ConcurrencyException(e.Message, e.InnerException);
} }
} }
@ -449,6 +451,7 @@ public class AbpOpenIddictTokenStore : AbpOpenIddictStoreBase<IOpenIddictTokenRe
catch (AbpDbConcurrencyException e) catch (AbpDbConcurrencyException e)
{ {
Logger.LogException(e); Logger.LogException(e);
await ConcurrencyExceptionHandler.HandleAsync(e);
throw new OpenIddictExceptions.ConcurrencyException(e.Message, e.InnerException); 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