如何在Abp.io中禁用并发检查?

问题描述 投票:0回答:1

我在后台作业中使用 FullAuditedEntity。我需要在此过程中多次保存实体,这是一项长时间运行的工作。但由于并发标记不匹配,我遇到了异常。我需要禁用 abp 框架中内置的并发标记检查。我怎样才能做到这一点?

附注我正在使用 mongodb。

我想保存实体,而不考虑并发标记检查。

Volo.Abp.BackgroundJobs.BackgroundJobExecutionException (M24582:36032)
A background job execution is failed. See inner exception for details.

Volo.Abp.BackgroundJobs.BackgroundJobExecutionException: A background job execution is failed. See inner exception for details.
 ---> Volo.Abp.Data.AbpDbConcurrencyException: Database operation expected to affect 1 row but actually affected 0 row. Data may have been modified or deleted since entities were loaded. This exception has been thrown on optimistic concurrency check.
   at Volo.Abp.Domain.Repositories.MongoDB.MongoDbRepository`2.ThrowOptimisticConcurrencyException()
   at Volo.Abp.Domain.Repositories.MongoDB.MongoDbRepository`2.UpdateAsync(TEntity entity, Boolean autoSave, CancellationToken cancellationToken)
   at Castle.DynamicProxy.AsyncInterceptorBase.ProceedAsynchronous[TResult](IInvocation invocation, IInvocationProceedInfo proceedInfo)
   at Volo.Abp.Castle.DynamicProxy.CastleAbpMethodInvocationAdapterWithReturnValue`1.ProceedAsync()
   at Volo.Abp.Uow.UnitOfWorkInterceptor.InterceptAsync(IAbpMethodInvocation invocation)
   at Volo.Abp.Castle.DynamicProxy.CastleAsyncAbpInterceptorAdapter`1.InterceptAsync[TResult](IInvocation invocation, IInvocationProceedInfo proceedInfo, Func`3 proceed)
   at KissIM.ParasiteSEO.Main.TrafficThief.BackgorundJobs.CreateArticleBackgroundJob.ExecuteAsync(CreateArticleBackgroundJobArgs args) in D:\OnlineTFS\WebApps2023\ParasiteSEO\KissIM.ParasiteSEO\aspnet-core\src\KissIM.ParasiteSEO.Domain\Main\TrafficThief\BackgorundJobs\CreateArticleBackgroundJob.cs:line 46
   at Volo.Abp.BackgroundJobs.BackgroundJobExecuter.ExecuteAsync(JobExecutionContext context)
   --- End of inner exception stack trace ---
   at Volo.Abp.BackgroundJobs.BackgroundJobExecuter.ExecuteAsync(JobExecutionContext context)
   at Volo.Abp.BackgroundJobs.Hangfire.HangfireJobExecutionAdapter`1.ExecuteAsync(String queue, TArgs args, CancellationToken cancellationToken)
   at InvokeStub_TaskAwaiter.GetResult(Object, Object, IntPtr*)
   at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr)
abp
1个回答
0
投票

没关系,我找到了解决方案。我在 MongoDbRepositories 中添加了 CreateEntitiesFilterAsync 和 CreateEntityFilterAsync 的覆盖

protected override Task<FilterDefinition<Entity>> CreateEntitiesFilterAsync(IEnumerable<Entity> entities, bool withConcurrencyStamp = false)
{
    return base.CreateEntitiesFilterAsync(entities, false);
}

protected override Task<FilterDefinition<Entity>> CreateEntityFilterAsync(Entity entity, bool withConcurrencyStamp = false,
    string? concurrencyStamp = null)
{
    return base.CreateEntityFilterAsync(entity, false, concurrencyStamp);
}
© www.soinside.com 2019 - 2024. All rights reserved.