execute delete in SaveAsync

This commit is contained in:
Anton Suhorukov 2023-09-19 17:00:54 +03:00
parent d56629278f
commit 878bf35ce7

View File

@ -50,27 +50,35 @@ public class IPRestrictionsRepository
public async Task<List<IpRestrictionBase>> SaveAsync(IEnumerable<IpRestrictionBase> ips, int tenant) public async Task<List<IpRestrictionBase>> SaveAsync(IEnumerable<IpRestrictionBase> ips, int tenant)
{ {
await using var tenantDbContext = _dbContextManager.CreateDbContext(); await using var tenantDbContext = _dbContextManager.CreateDbContext();
var strategy = tenantDbContext.Database.CreateExecutionStrategy();
tenantDbContext.TenantIpRestrictions.RemoveRange(await Queries.TenantIpRestrictionsAsync(tenantDbContext, tenant).ToListAsync()); await strategy.ExecuteAsync(async () =>
var ipsList = ips.Select(r => new TenantIpRestrictions
{ {
TenantId = tenant, using var filesDbContext = _dbContextManager.CreateDbContext();
Ip = r.Ip, using var tr = await tenantDbContext.Database.BeginTransactionAsync();
ForAdmin = r.ForAdmin
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(); return ips.ToList();
} }
} }
static file class Queries static file class Queries
{ {
public static readonly Func<TenantDbContext, int, IAsyncEnumerable<TenantIpRestrictions>> public static readonly Func<TenantDbContext, int, Task<int>>
TenantIpRestrictionsAsync = EF.CompileAsyncQuery( DeleteTenantIpRestrictionsAsync = EF.CompileAsyncQuery(
(TenantDbContext ctx, int tenantId) => (TenantDbContext ctx, int tenantId) =>
ctx.TenantIpRestrictions.Where(r => r.TenantId == tenantId)); ctx.TenantIpRestrictions.Where(r => r.TenantId == tenantId)
.ExecuteDelete());
} }