diff --git a/common/ASC.IPSecurity/Data/IPRestrictionsRepository.cs b/common/ASC.IPSecurity/Data/IPRestrictionsRepository.cs index f5a525beb6..379bf2d237 100644 --- a/common/ASC.IPSecurity/Data/IPRestrictionsRepository.cs +++ b/common/ASC.IPSecurity/Data/IPRestrictionsRepository.cs @@ -50,27 +50,35 @@ public class IPRestrictionsRepository public async Task> SaveAsync(IEnumerable ips, int tenant) { await using var tenantDbContext = _dbContextManager.CreateDbContext(); + var strategy = tenantDbContext.Database.CreateExecutionStrategy(); - tenantDbContext.TenantIpRestrictions.RemoveRange(await Queries.TenantIpRestrictionsAsync(tenantDbContext, tenant).ToListAsync()); - - var ipsList = ips.Select(r => new TenantIpRestrictions + await strategy.ExecuteAsync(async () => { - TenantId = tenant, - Ip = r.Ip, - ForAdmin = r.ForAdmin + using var filesDbContext = _dbContextManager.CreateDbContext(); + using var tr = await tenantDbContext.Database.BeginTransactionAsync(); + + await Queries.DeleteTenantIpRestrictionsAsync(tenantDbContext, tenant); + + var ipsList = ips.Select(r => new TenantIpRestrictions + { + TenantId = tenant, + Ip = r.Ip, + ForAdmin = r.ForAdmin + }); + tenantDbContext.TenantIpRestrictions.AddRange(ipsList); + + await tenantDbContext.SaveChangesAsync(); + await tr.CommitAsync(); }); - - tenantDbContext.TenantIpRestrictions.AddRange(ipsList); - await tenantDbContext.SaveChangesAsync(); - return ips.ToList(); } } static file class Queries { - public static readonly Func> - TenantIpRestrictionsAsync = EF.CompileAsyncQuery( + public static readonly Func> + DeleteTenantIpRestrictionsAsync = EF.CompileAsyncQuery( (TenantDbContext ctx, int tenantId) => - ctx.TenantIpRestrictions.Where(r => r.TenantId == tenantId)); + ctx.TenantIpRestrictions.Where(r => r.TenantId == tenantId) + .ExecuteDelete()); } \ No newline at end of file