namespace Brizco.Repository.Repositories.Base { public class WriteRepository : Repository, IDisposable, IWriteRepository where T : class, IApiEntity { public WriteRepository(ApplicationContext dbContext) : base(dbContext) { } 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 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 entities) { AssertExtensions.NotNull(entities, nameof(entities)); Entities.UpdateRange(entities); } public virtual void Delete(T entity) { AssertExtensions.NotNull(entity, nameof(entity)); Entities.Remove(entity); } public virtual void DeleteRange(IEnumerable entities) { AssertExtensions.NotNull(entities, nameof(entities)); Entities.RemoveRange(entities); } 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); } } }