using System; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; using System.Text; using NHibernate.Linq; using Spring.Data.NHibernate.Generic.Support; namespace Dao { public abstract class RepositoryBase : HibernateDaoSupport, IRepository where T : class { private static log4net.ILog logger = log4net.LogManager.GetLogger("RepositoryBase"); public virtual T Get(object id) { return this.HibernateTemplate.Get(id); } public virtual T Load(object id) { return this.HibernateTemplate.Load(id); } public virtual IQueryable LoadAll() { return Session.Query(); } public virtual IQueryable LoadAllWithPage(out long count, int pageIndex, int pageSize) { var result = Session.Query(); count = result.LongCount(); return result.Skip((pageIndex - 1) * pageSize).Take(pageSize); } public virtual IQueryable LoadAllFromCache() { return Session.Query().Cacheable(); } public virtual NHibernate.IQueryOver QueryOver() { return Session.QueryOver(); } public virtual object Save(T entity) { object obj = null; try { obj= this.HibernateTemplate.Save(entity); } catch (Exception) { } return obj; } public virtual void Update(T entity) { try { this.HibernateTemplate.Update(entity); } catch (Exception ex) { } } public virtual void Update(IList entities) { try { foreach (var entity in entities) { this.HibernateTemplate.Update(entity); } } catch (Exception) { } } /// /// 通过sql自定义语句更新数据 /// /// public virtual void Update(string sql) { try { NHibernate.IQuery query = Session.CreateSQLQuery(sql); query.ExecuteUpdate(); } catch (Exception ex) { //logger.Error("update error Type: " + sql + ": " + ex.Message); } } public virtual void SaveOrUpdate(T entity) { try { this.HibernateTemplate.SaveOrUpdate(entity); } catch (Exception ex) { //Type t = entity.GetType(); //logger.Error("SaveOrUpdate error Type: " + t.Name + ": " + ex.Message); } } public virtual void Delete(object id) { var entity = this.HibernateTemplate.Get(id); if (entity == null) { return; } this.HibernateTemplate.Delete(entity); } public virtual void Delete(IList idList) { foreach (var item in idList) { var entity = this.HibernateTemplate.Get(item); if (entity == null) { return; } this.HibernateTemplate.Delete(entity); } } } }