69 lines
2.1 KiB
C#
69 lines
2.1 KiB
C#
using Microsoft.EntityFrameworkCore;
|
|
using Microsoft.eShopWeb.ApplicationCore.Entities;
|
|
using Microsoft.eShopWeb.ApplicationCore.Interfaces;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Threading.Tasks;
|
|
|
|
namespace Microsoft.eShopWeb.Infrastructure.Data
|
|
{
|
|
/// <summary>
|
|
/// "There's some repetition here - couldn't we have some the sync methods call the async?"
|
|
/// https://blogs.msdn.microsoft.com/pfxteam/2012/04/13/should-i-expose-synchronous-wrappers-for-asynchronous-methods/
|
|
/// </summary>
|
|
/// <typeparam name="T"></typeparam>
|
|
public class EfRepository<T> : IAsyncRepository<T> where T : BaseEntity, IAggregateRoot
|
|
{
|
|
protected readonly CatalogContext _dbContext;
|
|
|
|
public EfRepository(CatalogContext dbContext)
|
|
{
|
|
_dbContext = dbContext;
|
|
}
|
|
|
|
public virtual async Task<T> GetByIdAsync(int id)
|
|
{
|
|
return await _dbContext.Set<T>().FindAsync(id);
|
|
}
|
|
|
|
public async Task<IReadOnlyList<T>> ListAllAsync()
|
|
{
|
|
return await _dbContext.Set<T>().ToListAsync();
|
|
}
|
|
|
|
public async Task<IReadOnlyList<T>> ListAsync(ISpecification<T> spec)
|
|
{
|
|
return await ApplySpecification(spec).ToListAsync();
|
|
}
|
|
|
|
public async Task<int> CountAsync(ISpecification<T> spec)
|
|
{
|
|
return await ApplySpecification(spec).CountAsync();
|
|
}
|
|
|
|
public async Task<T> AddAsync(T entity)
|
|
{
|
|
await _dbContext.Set<T>().AddAsync(entity);
|
|
await _dbContext.SaveChangesAsync();
|
|
|
|
return entity;
|
|
}
|
|
|
|
public async Task UpdateAsync(T entity)
|
|
{
|
|
_dbContext.Entry(entity).State = EntityState.Modified;
|
|
await _dbContext.SaveChangesAsync();
|
|
}
|
|
|
|
public async Task DeleteAsync(T entity)
|
|
{
|
|
_dbContext.Set<T>().Remove(entity);
|
|
await _dbContext.SaveChangesAsync();
|
|
}
|
|
|
|
private IQueryable<T> ApplySpecification(ISpecification<T> spec)
|
|
{
|
|
return SpecificationEvaluator<T>.GetQuery(_dbContext.Set<T>().AsQueryable(), spec);
|
|
}
|
|
}
|
|
} |