refactor(DbRepository); split to regions

This commit is contained in:
tekh 2025-09-12 12:45:20 +02:00
parent a2567791b7
commit 89de237aff

View File

@ -21,6 +21,7 @@ public class DbRepository<TDbContext, TEntity> : IRepository<TEntity> where TDbC
Mapper = mapper; Mapper = mapper;
} }
#region Create
public virtual async Task<TEntity> CreateAsync(TEntity entity, CancellationToken cancel = default) public virtual async Task<TEntity> CreateAsync(TEntity entity, CancellationToken cancel = default)
{ {
Entities.Add(entity); Entities.Add(entity);
@ -35,17 +36,21 @@ public class DbRepository<TDbContext, TEntity> : IRepository<TEntity> where TDbC
return entities; return entities;
} }
public Task<TEntity> CreateAsync<TDto>(TDto dto, CancellationToken cancel = default) => CreateAsync(Mapper!.Map<TEntity>(dto), cancel); public virtual Task<TEntity> CreateAsync<TDto>(TDto dto, CancellationToken cancel = default) => CreateAsync(Mapper!.Map<TEntity>(dto), cancel);
public Task<IEnumerable<TEntity>> CreateAsync<TDto>(IEnumerable<TDto> dtos, CancellationToken cancel = default) public virtual Task<IEnumerable<TEntity>> CreateAsync<TDto>(IEnumerable<TDto> dtos, CancellationToken cancel = default)
=> CreateAsync(Mapper!.Map<IEnumerable<TEntity>>(dtos), cancel); => CreateAsync(Mapper!.Map<IEnumerable<TEntity>>(dtos), cancel);
#endregion Create
public IQueryable<TEntity> Where(Expression<Func<TEntity, bool>> expression) => Entities.AsNoTracking().Where(expression); #region Read
public virtual IQueryable<TEntity> Where(Expression<Func<TEntity, bool>> expression) => Entities.AsNoTracking().Where(expression);
public IEnumerable<TEntity> GetAll() => Entities.AsNoTracking().ToList(); public virtual IEnumerable<TEntity> GetAll() => Entities.AsNoTracking().ToList();
public async Task<IEnumerable<TEntity>> GetAllAsync(CancellationToken cancel = default) => await Entities.AsNoTracking().ToListAsync(cancel); public virtual async Task<IEnumerable<TEntity>> GetAllAsync(CancellationToken cancel = default) => await Entities.AsNoTracking().ToListAsync(cancel);
#endregion Read
#region Update
public virtual Task UpdateAsync<TDto>(TDto dto, Expression<Func<TEntity, bool>> expression, CancellationToken cancel = default) => UpdateAsync(dto, q => q.Where(expression), cancel); public virtual Task UpdateAsync<TDto>(TDto dto, Expression<Func<TEntity, bool>> expression, CancellationToken cancel = default) => UpdateAsync(dto, q => q.Where(expression), cancel);
public virtual async Task UpdateAsync<TDto>(TDto dto, Func<IQueryable<TEntity>, IQueryable<TEntity>> query, CancellationToken cancel = default) public virtual async Task UpdateAsync<TDto>(TDto dto, Func<IQueryable<TEntity>, IQueryable<TEntity>> query, CancellationToken cancel = default)
@ -60,7 +65,9 @@ public class DbRepository<TDbContext, TEntity> : IRepository<TEntity> where TDbC
await Context.SaveChangesAsync(cancel); await Context.SaveChangesAsync(cancel);
} }
#endregion Update
#region Delete
public virtual Task DeleteAsync(Expression<Func<TEntity, bool>> expression, CancellationToken cancel = default) => DeleteAsync(q => q.Where(expression), cancel); public virtual Task DeleteAsync(Expression<Func<TEntity, bool>> expression, CancellationToken cancel = default) => DeleteAsync(q => q.Where(expression), cancel);
public virtual async Task DeleteAsync(Func<IQueryable<TEntity>, IQueryable<TEntity>> query, CancellationToken cancel = default) public virtual async Task DeleteAsync(Func<IQueryable<TEntity>, IQueryable<TEntity>> query, CancellationToken cancel = default)
@ -74,13 +81,14 @@ public class DbRepository<TDbContext, TEntity> : IRepository<TEntity> where TDbC
await Context.SaveChangesAsync(cancel); await Context.SaveChangesAsync(cancel);
} }
#endregion Delete
#region Obsolete #region Obsolete
[Obsolete("Use IRepository<TEntity>.Where")] [Obsolete("Use IRepository<TEntity>.Where")]
public IQueryable<TEntity> Read() => Entities.AsQueryable(); public virtual IQueryable<TEntity> Read() => Entities.AsQueryable();
[Obsolete("Use IRepository<TEntity>.Get")] [Obsolete("Use IRepository<TEntity>.Get")]
public IQueryable<TEntity> ReadOnly() => Entities.AsNoTracking(); public virtual IQueryable<TEntity> ReadOnly() => Entities.AsNoTracking();
#endregion #endregion
} }