CQRS_Simple/CQRS_Simple.Infrastructure/Uow/Repository.cs

60 lines
1.8 KiB
C#
Raw Permalink Normal View History

2022-04-07 14:00:58 +08:00
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();
}
}
}