0
0
mirror of https://github.com/alex289/CleanArchitecture.git synced 2025-06-30 02:31:08 +00:00
CleanArchitecture/CleanArchitecture.Infrastructure/Repositories/BaseRepository.cs
2023-03-06 15:51:24 +01:00

76 lines
1.6 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using CleanArchitecture.Domain.Entities;
using CleanArchitecture.Domain.Interfaces;
using CleanArchitecture.Domain.Interfaces.Repositories;
using Microsoft.EntityFrameworkCore;
namespace CleanArchitecture.Infrastructure.Repositories;
public class BaseRepository<TEntity> : IRepository<TEntity> where TEntity : Entity
{
protected readonly DbContext _dbContext;
protected readonly DbSet<TEntity> _dbSet;
public BaseRepository(DbContext context)
{
_dbContext = context;
_dbSet = _dbContext.Set<TEntity>();
}
public void Add(TEntity entity)
{
_dbSet.Add(entity);
}
public void AddRange(IEnumerable<TEntity> entities)
{
_dbSet.AddRange(entities);
}
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
public virtual IQueryable<TEntity> GetAll()
{
return _dbSet;
}
public virtual IQueryable<TEntity> GetAllNoTracking()
{
return _dbSet.AsNoTracking();
}
public virtual async Task<TEntity?> GetByIdAsync(Guid id)
{
return await _dbSet.FindAsync(id);
}
public int SaveChanges()
{
return _dbContext.SaveChanges();
}
protected virtual void Dispose(bool disposing)
{
if (disposing)
{
_dbContext.Dispose();
}
}
public virtual void Update(TEntity entity)
{
_dbSet.Update(entity);
}
public Task<bool> ExistsAsync(Guid id)
{
return _dbSet.AnyAsync(entity => entity.Id == id);
}
}