first commit
This commit is contained in:
@@ -0,0 +1,90 @@
|
||||
using System.Linq.Expressions;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using MyNewProjectName.Domain.Common;
|
||||
using MyNewProjectName.Domain.Interfaces;
|
||||
using MyNewProjectName.Infrastructure.Persistence.Context;
|
||||
|
||||
namespace MyNewProjectName.Infrastructure.Persistence.Repositories;
|
||||
|
||||
/// <summary>
|
||||
/// Generic repository implementation
|
||||
/// </summary>
|
||||
public class Repository<T> : IRepository<T> where T : BaseEntity
|
||||
{
|
||||
protected readonly ApplicationDbContext _context;
|
||||
protected readonly DbSet<T> _dbSet;
|
||||
|
||||
public Repository(ApplicationDbContext context)
|
||||
{
|
||||
_context = context;
|
||||
_dbSet = context.Set<T>();
|
||||
}
|
||||
|
||||
public virtual async Task<T?> GetByIdAsync(Guid id, CancellationToken cancellationToken = default)
|
||||
{
|
||||
return await _dbSet.FindAsync(new object[] { id }, cancellationToken);
|
||||
}
|
||||
|
||||
public virtual async Task<IEnumerable<T>> GetAllAsync(CancellationToken cancellationToken = default)
|
||||
{
|
||||
return await _dbSet.ToListAsync(cancellationToken);
|
||||
}
|
||||
|
||||
public virtual async Task<IEnumerable<T>> FindAsync(Expression<Func<T, bool>> predicate, CancellationToken cancellationToken = default)
|
||||
{
|
||||
return await _dbSet.Where(predicate).ToListAsync(cancellationToken);
|
||||
}
|
||||
|
||||
public virtual async Task<T?> FirstOrDefaultAsync(Expression<Func<T, bool>> predicate, CancellationToken cancellationToken = default)
|
||||
{
|
||||
return await _dbSet.FirstOrDefaultAsync(predicate, cancellationToken);
|
||||
}
|
||||
|
||||
public virtual async Task<bool> AnyAsync(Expression<Func<T, bool>> predicate, CancellationToken cancellationToken = default)
|
||||
{
|
||||
return await _dbSet.AnyAsync(predicate, cancellationToken);
|
||||
}
|
||||
|
||||
public virtual async Task<int> CountAsync(Expression<Func<T, bool>>? predicate = null, CancellationToken cancellationToken = default)
|
||||
{
|
||||
if (predicate == null)
|
||||
return await _dbSet.CountAsync(cancellationToken);
|
||||
|
||||
return await _dbSet.CountAsync(predicate, cancellationToken);
|
||||
}
|
||||
|
||||
public virtual async Task AddAsync(T entity, CancellationToken cancellationToken = default)
|
||||
{
|
||||
await _dbSet.AddAsync(entity, cancellationToken);
|
||||
}
|
||||
|
||||
public virtual async Task AddRangeAsync(IEnumerable<T> entities, CancellationToken cancellationToken = default)
|
||||
{
|
||||
await _dbSet.AddRangeAsync(entities, cancellationToken);
|
||||
}
|
||||
|
||||
public virtual void Update(T entity)
|
||||
{
|
||||
_dbSet.Attach(entity);
|
||||
_context.Entry(entity).State = EntityState.Modified;
|
||||
}
|
||||
|
||||
public virtual void UpdateRange(IEnumerable<T> entities)
|
||||
{
|
||||
_dbSet.AttachRange(entities);
|
||||
foreach (var entity in entities)
|
||||
{
|
||||
_context.Entry(entity).State = EntityState.Modified;
|
||||
}
|
||||
}
|
||||
|
||||
public virtual void Remove(T entity)
|
||||
{
|
||||
_dbSet.Remove(entity);
|
||||
}
|
||||
|
||||
public virtual void RemoveRange(IEnumerable<T> entities)
|
||||
{
|
||||
_dbSet.RemoveRange(entities);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user