Api/Netina.Repository/Repositories/Base/ReadRepository.cs

46 lines
1.3 KiB
C#

using Microsoft.EntityFrameworkCore;
namespace Netina.Repository.Repositories.Base
{
public class ReadRepository<T> : Repository<T>, IDisposable, IReadRepository<T> where T : class, IApiEntity
{
public ReadRepository(
ApplicationContext dbContext) : base(dbContext)
{
}
public new void Dispose()
{
DbContext?.Dispose();
}
public virtual T GetById(params object[] ids)
{
var ent = Entities.Find(ids);
if (ent == null)
throw new AppException("Ent not found");
Detach(ent);
return ent;
}
public virtual ValueTask<T> GetByIdAsync(CancellationToken cancellationToken, params object[] ids)
{
return Entities.FindAsync(ids, cancellationToken);
}
public virtual void Detach(T entity)
{
AssertExtensions.NotNull(entity, nameof(entity));
var entry = DbContext.Entry(entity);
entry.State = EntityState.Detached;
}
public virtual void Attach(T entity)
{
AssertExtensions.NotNull(entity, nameof(entity));
if (DbContext.Entry(entity).State == EntityState.Detached)
Entities.Attach(entity);
}
}
}