Use IExecutionStrategy

This commit is contained in:
2025-11-03 21:00:52 +09:00
parent 68b26d8cf5
commit 2dcaf45322
3 changed files with 107 additions and 88 deletions

View File

@ -1,5 +1,6 @@
using Hcs.WebApp.Data.Hcs;
using Hcs.WebApp.Services;
using Microsoft.EntityFrameworkCore;
namespace Hcs.WebApp.BackgroundServices.CampaignManagers
{
@ -41,9 +42,12 @@ namespace Hcs.WebApp.BackgroundServices.CampaignManagers
private async Task DoStartStepAsync()
{
IEnumerable<Operation> operations;
IEnumerable<Operation>? operations = null;
using var context = HeadquartersService.GetNewContext();
var executionStrategy = context.Database.CreateExecutionStrategy();
await executionStrategy.ExecuteAsync(async () =>
{
using var transaction = await context.Database.BeginTransactionAsync();
try
{
@ -64,6 +68,7 @@ namespace Hcs.WebApp.BackgroundServices.CampaignManagers
throw;
}
});
if (operations != null)
{
@ -98,6 +103,9 @@ namespace Hcs.WebApp.BackgroundServices.CampaignManagers
if (resultWaitState.HasCampaignOperation(campaign.Id)) return;
using var context = HeadquartersService.GetNewContext();
var executionStrategy = context.Database.CreateExecutionStrategy();
await executionStrategy.ExecuteAsync(async () =>
{
using var transaction = await context.Database.BeginTransactionAsync();
try
{
@ -114,6 +122,7 @@ namespace Hcs.WebApp.BackgroundServices.CampaignManagers
throw;
}
});
State = IManager.ManagerState.Ended;
}

View File

@ -1,6 +1,7 @@
using Hcs.Broker;
using Hcs.WebApp.Data.Hcs;
using Hcs.WebApp.Services;
using Microsoft.EntityFrameworkCore;
using Newtonsoft.Json;
namespace Hcs.WebApp.BackgroundServices.ResultGetters.NsiCommon
@ -21,6 +22,9 @@ namespace Hcs.WebApp.BackgroundServices.ResultGetters.NsiCommon
var registryService = scope.ServiceProvider.GetRequiredService<RegistryService>();
using var context = headquartersService.GetNewContext();
var executionStrategy = context.Database.CreateExecutionStrategy();
await executionStrategy.ExecuteAsync(async () =>
{
using var transaction = await context.Database.BeginTransactionAsync();
try
{
@ -47,10 +51,11 @@ namespace Hcs.WebApp.BackgroundServices.ResultGetters.NsiCommon
}
catch
{
transaction?.Rollback();
await transaction.RollbackAsync();
throw;
}
});
return true;
}

View File

@ -44,6 +44,9 @@ namespace Hcs.WebApp.Services
public async Task UpdateUserAsync(string userId, string roleId, string password)
{
using var context = factory.CreateDbContext();
var executionStrategy = context.Database.CreateExecutionStrategy();
await executionStrategy.ExecuteAsync(async () =>
{
using var transaction = await context.Database.BeginTransactionAsync();
try
{
@ -79,14 +82,16 @@ namespace Hcs.WebApp.Services
}
await context.SaveChangesAsync();
await transaction.CommitAsync();
}
catch (Exception)
catch
{
await transaction.RollbackAsync();
throw;
}
await transaction.CommitAsync();
});
}
public async Task<IdentityResult> DeleteUserAsync(string userId)