fix GetOldEventsAsync
This commit is contained in:
parent
e1bbd9a389
commit
fab1e08cc5
@ -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());
|
|
||||||
}
|
}
|
||||||
}
|
}
|
Loading…
Reference in New Issue
Block a user