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

90 lines
3.0 KiB
C#
Raw Normal View History

2023-12-16 20:25:12 +03:30

2024-04-16 20:01:34 +03:30
namespace Netina.Repository.Repositories.Base
2023-12-16 20:25:12 +03:30
{
2024-08-09 21:55:16 +03:30
public class WriteRepository<T>(ApplicationContext dbContext, ICurrentUserService currentUserService)
: Repository<T>(dbContext), IDisposable, IWriteRepository<T>
where T : class, IApiEntity
2023-12-16 20:25:12 +03:30
{
public void Dispose()
{
DbContext?.Dispose();
}
public void HardDelete(T entity)
{
AssertExtensions.NotNull(entity, nameof(entity));
Entities.Remove(entity);
}
public virtual void Add(T entity)
{
AssertExtensions.NotNull(entity, nameof(entity));
Entities.Add(entity);
}
public virtual void AddRange(IEnumerable<T> entities)
{
AssertExtensions.NotNull(entities, nameof(entities));
Entities.AddRange(entities);
}
public virtual void Update(T entity)
{
AssertExtensions.NotNull(entity, nameof(entity));
Detach(entity);
Entities.Update(entity);
}
public virtual void UpdateRange(IEnumerable<T> entities)
{
AssertExtensions.NotNull(entities, nameof(entities));
Entities.UpdateRange(entities);
}
public virtual void Delete(T entity)
{
AssertExtensions.NotNull(entity, nameof(entity));
Entities.Entry(entity).Property(e => e.RemovedAt)
.CurrentValue = DateTime.Now;
Entities.Entry(entity).Property(e => e.IsRemoved)
.CurrentValue = true;
2024-08-09 21:55:16 +03:30
if (currentUserService.UserName != null)
2023-12-16 20:25:12 +03:30
Entities.Entry(entity).Property(e => e.RemovedBy)
2024-08-09 21:55:16 +03:30
.CurrentValue = currentUserService.UserName;
2023-12-16 20:25:12 +03:30
Entities.Update(entity);
}
public virtual void DeleteRange(IEnumerable<T> entities)
{
var apiEntities = entities.ToList();
AssertExtensions.NotNull(apiEntities, nameof(entities));
foreach (var entity in apiEntities)
{
Entities.Entry(entity).Property(e => e.RemovedAt)
.CurrentValue = DateTime.Now;
Entities.Entry(entity).Property(e => e.IsRemoved)
.CurrentValue = true;
2024-08-09 21:55:16 +03:30
if (currentUserService.UserName != null)
2023-12-16 20:25:12 +03:30
Entities.Entry(entity).Property(e => e.RemovedBy)
2024-08-09 21:55:16 +03:30
.CurrentValue = currentUserService.UserName;
2023-12-16 20:25:12 +03:30
Entities.Update(entity);
}
}
public virtual void Detach(T entity)
{
AssertExtensions.NotNull(entity, nameof(entity));
var entry = DbContext.Entry(entity);
if (entry != null)
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);
}
}
}