diff --git a/common/services/ASC.ClearEvents/Services/ClearEventsService.cs b/common/services/ASC.ClearEvents/Services/ClearEventsService.cs index d7e0643a63..2bcaada631 100644 --- a/common/services/ASC.ClearEvents/Services/ClearEventsService.cs +++ b/common/services/ASC.ClearEvents/Services/ClearEventsService.cs @@ -90,15 +90,15 @@ public class ClearEventsService : IHostedService, IDisposable private async Task GetOldEventsAsync(Expression>> func, string settings) where T : MessageEvent { - List ids; var compile = func.Compile(); + + using var scope = _serviceScopeFactory.CreateScope(); + using var ef = scope.ServiceProvider.GetService>().CreateDbContext(); + var table = compile.Invoke(ef); + int count; do { - using var scope = _serviceScopeFactory.CreateScope(); - using var ef = scope.ServiceProvider.GetService>().CreateDbContext(); - var table = compile.Invoke(ef); - - var ae = table + count = await table .Join(ef.Tenants, r => r.TenantId, r => r.Id, (audit, tenant) => audit) .Select(r => new { @@ -112,18 +112,10 @@ public class ClearEventsService : IHostedService, IDisposable .Where(a => a.TenantId == r.TenantId && a.Id == TenantAuditSettings.Guid) .Select(r => JsonExtensions.JsonValue(nameof(r.Data).ToLower(), settings)) .FirstOrDefault() ?? TenantAuditSettings.MaxLifeTime.ToString()))) - .Take(1000); - - ids = await ae.Select(r => r.ef).ToListAsync(); - - if (!ids.Any()) - { - return; - } - - table.RemoveRange(ids); - await ef.SaveChangesAsync(); - - } while (ids.Any()); + .Select(r => r.ef) + .Take(1000) + .ExecuteDeleteAsync(); + } + while(count == 1000); } } \ No newline at end of file