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 TEntity : ChangeLogAbstract
|
||||||
where TRequest : ChangeLogBaseRequest
|
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)
|
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;
|
var result = 0;
|
||||||
if (dtos.Any())
|
if (dtos.Any())
|
||||||
{
|
{
|
||||||
|
using var transaction = await db.Database.BeginTransactionAsync(token);
|
||||||
var entities = dtos.Select(Convert);
|
var entities = dtos.Select(Convert);
|
||||||
var creation = DateTimeOffset.UtcNow;
|
var creation = DateTimeOffset.UtcNow;
|
||||||
var dbSet = context.Set<TEntity>();
|
var dbSet = db.Set<TEntity>();
|
||||||
foreach (var entity in entities)
|
foreach (var entity in entities)
|
||||||
{
|
{
|
||||||
entity.Id = default;
|
entity.Id = default;
|
||||||
@ -46,6 +47,7 @@ public abstract class ChangeLogRepositoryAbstract<TDto, TEntity, TRequest> : ICh
|
|||||||
}
|
}
|
||||||
|
|
||||||
result += await SaveChangesWithExceptionHandling(token);
|
result += await SaveChangesWithExceptionHandling(token);
|
||||||
|
await transaction.CommitAsync(token);
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
@ -62,9 +64,8 @@ public abstract class ChangeLogRepositoryAbstract<TDto, TEntity, TRequest> : ICh
|
|||||||
|
|
||||||
var ids = dtos.Select(d => d.Id);
|
var ids = dtos.Select(d => d.Id);
|
||||||
|
|
||||||
using var transaction = context.Database.BeginTransaction();
|
|
||||||
var result = 0;
|
var result = 0;
|
||||||
var dbSet = context
|
var dbSet = db
|
||||||
.Set<TEntity>();
|
.Set<TEntity>();
|
||||||
|
|
||||||
var entitiesToDelete = await dbSet
|
var entitiesToDelete = await dbSet
|
||||||
@ -80,13 +81,14 @@ public abstract class ChangeLogRepositoryAbstract<TDto, TEntity, TRequest> : ICh
|
|||||||
throw new ArgumentInvalidException(nameof(dtos), $"записи с id:[{stringnotFoundIds}] не найдены, или не актуальны.");
|
throw new ArgumentInvalidException(nameof(dtos), $"записи с id:[{stringnotFoundIds}] не найдены, или не актуальны.");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
using var transaction = db.Database.BeginTransaction();
|
||||||
foreach (var entity in entitiesToDelete)
|
foreach (var entity in entitiesToDelete)
|
||||||
{
|
{
|
||||||
entity.IdState = ChangeLogAbstract.IdStateReplaced;
|
entity.IdState = ChangeLogAbstract.IdStateReplaced;
|
||||||
entity.Obsolete = updateTime;
|
entity.Obsolete = updateTime;
|
||||||
entity.IdEditor = idUser;
|
entity.IdEditor = idUser;
|
||||||
}
|
}
|
||||||
result += await context.SaveChangesAsync(token);
|
result += await db.SaveChangesAsync(token);
|
||||||
|
|
||||||
var entitiesNew = dtos.Select(Convert);
|
var entitiesNew = dtos.Select(Convert);
|
||||||
foreach (var entity in entitiesNew)
|
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)
|
public async Task<int> ClearAndInsertRange(int idUser, TRequest request, IEnumerable<TDto> dtos, CancellationToken token)
|
||||||
{
|
{
|
||||||
var result = 0;
|
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 Clear(idUser, request, token);
|
||||||
result += await InsertRange(idUser, dtos, token);
|
result += await InsertRange(idUser, dtos, token);
|
||||||
await transaction.CommitAsync(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)
|
public async Task<int> DeleteRange(int idUser, IEnumerable<int> ids, CancellationToken token)
|
||||||
{
|
{
|
||||||
var updateTime = DateTimeOffset.UtcNow;
|
var updateTime = DateTimeOffset.UtcNow;
|
||||||
var query = context.Set<TEntity>()
|
var query = db.Set<TEntity>()
|
||||||
.Where(e => ids.Contains(e.Id))
|
.Where(e => ids.Contains(e.Id))
|
||||||
.Where(e => e.Obsolete == null);
|
.Where(e => e.Obsolete == null);
|
||||||
|
|
||||||
@ -269,7 +271,7 @@ public abstract class ChangeLogRepositoryAbstract<TDto, TEntity, TRequest> : ICh
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
var result = await context.SaveChangesAsync(token);
|
var result = await db.SaveChangesAsync(token);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
catch (DbUpdateException ex)
|
catch (DbUpdateException ex)
|
||||||
|
@ -23,7 +23,7 @@ public class ProcessMapPlanBaseRepository<TDto, TEntity> : ChangeLogRepositoryAb
|
|||||||
|
|
||||||
protected override IQueryable<TEntity> BuildQuery(ProcessMapPlanBaseRequestWithWell request)
|
protected override IQueryable<TEntity> BuildQuery(ProcessMapPlanBaseRequestWithWell request)
|
||||||
{
|
{
|
||||||
var query = context
|
var query = db
|
||||||
.Set<TEntity>()
|
.Set<TEntity>()
|
||||||
.Include(e => e.Author)
|
.Include(e => e.Author)
|
||||||
.Include(e => e.Editor)
|
.Include(e => e.Editor)
|
||||||
|
Loading…
Reference in New Issue
Block a user