forked from ddrilling/AsbCloudServer
ChangeLogRepositoryAbstract add transaction to insertRange and updateRange methods
This commit is contained in:
parent
9f25f631c5
commit
2468a0c2a1
@ -18,11 +18,11 @@ public abstract class ChangeLogRepositoryAbstract<TDto, TEntity, TRequest> : 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<int> InsertRange(int idUser, IEnumerable<TDto> dtos, CancellationToken token)
|
||||
@ -30,9 +30,10 @@ public abstract class ChangeLogRepositoryAbstract<TDto, TEntity, TRequest> : 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<TEntity>();
|
||||
var dbSet = db.Set<TEntity>();
|
||||
foreach (var entity in entities)
|
||||
{
|
||||
entity.Id = default;
|
||||
@ -46,6 +47,7 @@ public abstract class ChangeLogRepositoryAbstract<TDto, TEntity, TRequest> : ICh
|
||||
}
|
||||
|
||||
result += await SaveChangesWithExceptionHandling(token);
|
||||
await transaction.CommitAsync(token);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
@ -62,9 +64,8 @@ public abstract class ChangeLogRepositoryAbstract<TDto, TEntity, TRequest> : ICh
|
||||
|
||||
var ids = dtos.Select(d => d.Id);
|
||||
|
||||
using var transaction = context.Database.BeginTransaction();
|
||||
var result = 0;
|
||||
var dbSet = context
|
||||
var dbSet = db
|
||||
.Set<TEntity>();
|
||||
|
||||
var entitiesToDelete = await dbSet
|
||||
@ -80,13 +81,14 @@ public abstract class ChangeLogRepositoryAbstract<TDto, TEntity, TRequest> : 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<TDto, TEntity, TRequest> : ICh
|
||||
public async Task<int> ClearAndInsertRange(int idUser, TRequest request, IEnumerable<TDto> 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<TDto, TEntity, TRequest> : ICh
|
||||
public async Task<int> DeleteRange(int idUser, IEnumerable<int> ids, CancellationToken token)
|
||||
{
|
||||
var updateTime = DateTimeOffset.UtcNow;
|
||||
var query = context.Set<TEntity>()
|
||||
var query = db.Set<TEntity>()
|
||||
.Where(e => ids.Contains(e.Id))
|
||||
.Where(e => e.Obsolete == null);
|
||||
|
||||
@ -269,7 +271,7 @@ public abstract class ChangeLogRepositoryAbstract<TDto, TEntity, TRequest> : ICh
|
||||
{
|
||||
try
|
||||
{
|
||||
var result = await context.SaveChangesAsync(token);
|
||||
var result = await db.SaveChangesAsync(token);
|
||||
return result;
|
||||
}
|
||||
catch (DbUpdateException ex)
|
||||
|
@ -23,7 +23,7 @@ public class ProcessMapPlanBaseRepository<TDto, TEntity> : ChangeLogRepositoryAb
|
||||
|
||||
protected override IQueryable<TEntity> BuildQuery(ProcessMapPlanBaseRequestWithWell request)
|
||||
{
|
||||
var query = context
|
||||
var query = db
|
||||
.Set<TEntity>()
|
||||
.Include(e => e.Author)
|
||||
.Include(e => e.Editor)
|
||||
|
Loading…
Reference in New Issue
Block a user