using Gestor.Infrastructure.Entities.Generic; using NHibernate; using NHibernate.Linq; using NHibernate.Util; using System; using System.Collections.Generic; using System.Linq; using System.Runtime.CompilerServices; namespace Gestor.Infrastructure.Repository.Generic { public class GenericRepository : IGenericRepository where T : class { private readonly ISession _currentSession; public GenericRepository(ISession currentSession) { this._currentSession = currentSession; } public virtual void Add(T entity) { this._currentSession.Save(entity); } public void AddRange(IEnumerable entities) { if (entities != null) { entities.ForEach((T entity) => this._currentSession.Save(entity)); } } public IQueryable All() { return this._currentSession.Query(); } public void Delete(T entity) { this._currentSession.Delete(entity); } public void DeleteRange(IEnumerable entities) { if (entities != null) { entities.ForEach((T entity) => this._currentSession.Delete(entity)); } } public void Evict(TEntity entity) where TEntity : EntityBase { this._currentSession.Evict(entity); } public T FindEntityById(long id) { return this._currentSession.Get(id); } protected void Load(TEntity entity) where TEntity : EntityBase { EntityBase entityBase = entity; if (entityBase == null) { return; } this._currentSession.Load(entity, entityBase.Id); } public void Merge(T entity) { this._currentSession.Merge(entity); } public virtual void SaveOrUpdate(T entity) { this._currentSession.SaveOrUpdate(entity); } public void Update(T entity) { this._currentSession.Update(entity); } } }