From 2468a0c2a122d84ad96f26933778eaed524d070d Mon Sep 17 00:00:00 2001 From: ngfrolov Date: Tue, 6 Feb 2024 16:49:29 +0500 Subject: [PATCH] ChangeLogRepositoryAbstract add transaction to insertRange and updateRange methods --- .../Repository/ChangeLogRepositoryAbstract.cs | 22 ++++++++++--------- .../ProcessMapPlanBaseRepository.cs | 2 +- 2 files changed, 13 insertions(+), 11 deletions(-) diff --git a/AsbCloudInfrastructure/Repository/ChangeLogRepositoryAbstract.cs b/AsbCloudInfrastructure/Repository/ChangeLogRepositoryAbstract.cs index 64208a8e..ba32907c 100644 --- a/AsbCloudInfrastructure/Repository/ChangeLogRepositoryAbstract.cs +++ b/AsbCloudInfrastructure/Repository/ChangeLogRepositoryAbstract.cs @@ -18,11 +18,11 @@ public abstract class ChangeLogRepositoryAbstract : ICh where TEntity : ChangeLogAbstract where TRequest : ChangeLogBaseRequest { - protected readonly IAsbCloudDbContext context; + protected readonly IAsbCloudDbContext db; - public ChangeLogRepositoryAbstract(IAsbCloudDbContext context) + public ChangeLogRepositoryAbstract(IAsbCloudDbContext db) { - this.context = context; + this.db = db; } public async Task InsertRange(int idUser, IEnumerable dtos, CancellationToken token) @@ -30,9 +30,10 @@ public abstract class ChangeLogRepositoryAbstract : ICh var result = 0; if (dtos.Any()) { + using var transaction = await db.Database.BeginTransactionAsync(token); var entities = dtos.Select(Convert); var creation = DateTimeOffset.UtcNow; - var dbSet = context.Set(); + var dbSet = db.Set(); foreach (var entity in entities) { entity.Id = default; @@ -46,6 +47,7 @@ public abstract class ChangeLogRepositoryAbstract : ICh } result += await SaveChangesWithExceptionHandling(token); + await transaction.CommitAsync(token); } return result; } @@ -62,9 +64,8 @@ public abstract class ChangeLogRepositoryAbstract : ICh var ids = dtos.Select(d => d.Id); - using var transaction = context.Database.BeginTransaction(); var result = 0; - var dbSet = context + var dbSet = db .Set(); var entitiesToDelete = await dbSet @@ -80,13 +81,14 @@ public abstract class ChangeLogRepositoryAbstract : ICh throw new ArgumentInvalidException(nameof(dtos), $"записи с id:[{stringnotFoundIds}] не найдены, или не актуальны."); } + using var transaction = db.Database.BeginTransaction(); foreach (var entity in entitiesToDelete) { entity.IdState = ChangeLogAbstract.IdStateReplaced; entity.Obsolete = updateTime; entity.IdEditor = idUser; } - result += await context.SaveChangesAsync(token); + result += await db.SaveChangesAsync(token); var entitiesNew = dtos.Select(Convert); foreach (var entity in entitiesNew) @@ -143,7 +145,7 @@ public abstract class ChangeLogRepositoryAbstract : ICh public async Task ClearAndInsertRange(int idUser, TRequest request, IEnumerable dtos, CancellationToken token) { var result = 0; - var transaction = await context.Database.BeginTransactionAsync(token); + var transaction = await db.Database.BeginTransactionAsync(token); result += await Clear(idUser, request, token); result += await InsertRange(idUser, dtos, token); await transaction.CommitAsync(token); @@ -153,7 +155,7 @@ public abstract class ChangeLogRepositoryAbstract : ICh public async Task DeleteRange(int idUser, IEnumerable ids, CancellationToken token) { var updateTime = DateTimeOffset.UtcNow; - var query = context.Set() + var query = db.Set() .Where(e => ids.Contains(e.Id)) .Where(e => e.Obsolete == null); @@ -269,7 +271,7 @@ public abstract class ChangeLogRepositoryAbstract : ICh { try { - var result = await context.SaveChangesAsync(token); + var result = await db.SaveChangesAsync(token); return result; } catch (DbUpdateException ex) diff --git a/AsbCloudInfrastructure/Repository/ProcessMapPlanBaseRepository.cs b/AsbCloudInfrastructure/Repository/ProcessMapPlanBaseRepository.cs index 0133b527..7da062ac 100644 --- a/AsbCloudInfrastructure/Repository/ProcessMapPlanBaseRepository.cs +++ b/AsbCloudInfrastructure/Repository/ProcessMapPlanBaseRepository.cs @@ -23,7 +23,7 @@ public class ProcessMapPlanBaseRepository : ChangeLogRepositoryAb protected override IQueryable BuildQuery(ProcessMapPlanBaseRequestWithWell request) { - var query = context + var query = db .Set() .Include(e => e.Author) .Include(e => e.Editor)