fix GetOldEventsAsync

This commit is contained in:
Anton Suhorukov 2023-05-21 00:34:05 +03:00
parent e1bbd9a389
commit fab1e08cc5

View File

@ -90,15 +90,15 @@ public class ClearEventsService : IHostedService, IDisposable
private async Task GetOldEventsAsync<T>(Expression<Func<MessagesContext, DbSet<T>>> func, string settings) where T : MessageEvent private async Task GetOldEventsAsync<T>(Expression<Func<MessagesContext, DbSet<T>>> func, string settings) where T : MessageEvent
{ {
List<T> ids;
var compile = func.Compile(); var compile = func.Compile();
using var scope = _serviceScopeFactory.CreateScope();
using var ef = scope.ServiceProvider.GetService<IDbContextFactory<MessagesContext>>().CreateDbContext();
var table = compile.Invoke(ef);
int count;
do do
{ {
using var scope = _serviceScopeFactory.CreateScope(); count = await table
using var ef = scope.ServiceProvider.GetService<IDbContextFactory<MessagesContext>>().CreateDbContext();
var table = compile.Invoke(ef);
var ae = table
.Join(ef.Tenants, r => r.TenantId, r => r.Id, (audit, tenant) => audit) .Join(ef.Tenants, r => r.TenantId, r => r.Id, (audit, tenant) => audit)
.Select(r => new .Select(r => new
{ {
@ -112,18 +112,10 @@ public class ClearEventsService : IHostedService, IDisposable
.Where(a => a.TenantId == r.TenantId && a.Id == TenantAuditSettings.Guid) .Where(a => a.TenantId == r.TenantId && a.Id == TenantAuditSettings.Guid)
.Select(r => JsonExtensions.JsonValue(nameof(r.Data).ToLower(), settings)) .Select(r => JsonExtensions.JsonValue(nameof(r.Data).ToLower(), settings))
.FirstOrDefault() ?? TenantAuditSettings.MaxLifeTime.ToString()))) .FirstOrDefault() ?? TenantAuditSettings.MaxLifeTime.ToString())))
.Take(1000); .Select(r => r.ef)
.Take(1000)
ids = await ae.Select(r => r.ef).ToListAsync(); .ExecuteDeleteAsync();
}
if (!ids.Any()) while(count == 1000);
{
return;
}
table.RemoveRange(ids);
await ef.SaveChangesAsync();
} while (ids.Any());
} }
} }