60 lines
1.8 KiB
C#
60 lines
1.8 KiB
C#
|
using System;
|
|||
|
using System.Collections.Generic;
|
|||
|
using System.Linq;
|
|||
|
using System.Threading.Tasks;
|
|||
|
using Microsoft.EntityFrameworkCore;
|
|||
|
|
|||
|
namespace CQRS_Simple.Infrastructure.Uow
|
|||
|
{
|
|||
|
public class Repository<T, TPrimaryKey> : IRepository<T, TPrimaryKey> where T : Entity<TPrimaryKey>
|
|||
|
{
|
|||
|
private readonly IUnitOfWork _unitOfWork;
|
|||
|
|
|||
|
public Repository(IUnitOfWork unitOfWork)
|
|||
|
{
|
|||
|
_unitOfWork = unitOfWork;
|
|||
|
}
|
|||
|
public void Add(T entity)
|
|||
|
{
|
|||
|
_unitOfWork.Context.Set<T>().Add(entity);
|
|||
|
}
|
|||
|
|
|||
|
public void Delete(T entity)
|
|||
|
{
|
|||
|
T existing = _unitOfWork.Context.Set<T>().Find(entity);
|
|||
|
if (existing != null) _unitOfWork.Context.Set<T>().Remove(existing);
|
|||
|
}
|
|||
|
|
|||
|
public IUnitOfWork UnitOfWork => _unitOfWork;
|
|||
|
|
|||
|
public T GetById(TPrimaryKey id)
|
|||
|
{
|
|||
|
return _unitOfWork.Context.Set<T>().FirstOrDefault(x => id.Equals(x.Id));
|
|||
|
}
|
|||
|
public Task<T> GetByIdAsync(TPrimaryKey id)
|
|||
|
{
|
|||
|
return _unitOfWork.Context.Set<T>().FirstOrDefaultAsync(x => id.Equals(x.Id));
|
|||
|
}
|
|||
|
|
|||
|
public IEnumerable<T> GetAll()
|
|||
|
{
|
|||
|
return _unitOfWork.Context.Set<T>().AsEnumerable<T>();
|
|||
|
}
|
|||
|
|
|||
|
public IEnumerable<T> Get(System.Linq.Expressions.Expression<Func<T, bool>> predicate)
|
|||
|
{
|
|||
|
return _unitOfWork.Context.Set<T>().Where(predicate).AsEnumerable<T>();
|
|||
|
}
|
|||
|
|
|||
|
public void Update(T entity)
|
|||
|
{
|
|||
|
_unitOfWork.Context.Entry(entity).State = EntityState.Modified;
|
|||
|
_unitOfWork.Context.Set<T>().Attach(entity);
|
|||
|
}
|
|||
|
|
|||
|
public async Task<IEnumerable<T>> GetAllAsync()
|
|||
|
{
|
|||
|
return await _unitOfWork.Context.Set<T>().ToListAsync();
|
|||
|
}
|
|||
|
}
|
|||
|
}
|