using System; using System.Collections.Generic; using System.Linq; using System.Text; using NHibernate; using System.Linq.Expressions; namespace Tanshu.Accounts.Repository { public class UnitOfWork : IUnitOfWork where T : class { protected readonly ISession _session; private ITransaction _transaction; public UnitOfWork() { _session = SessionManager.Session; _transaction = _session.BeginTransaction(); } public void Insert(T item) { _session.Save(item); } public void Update(T item) { _session.Update(item); } public void Delete(T item) { _session.Delete(item); } public void Delete(Expression> query) { Delete(Get(query)); } public T Get(Expression> query) { return _session.QueryOver() .Where(query) .SingleOrDefault(); } public IList List() { return _session.CreateCriteria() .List(); } public IList List(Expression> query) { return _session.QueryOver() .Where(query) .List(); } public void Dispose() { if (_transaction != null) _transaction.Rollback(); } public void SaveChanges() { if (_transaction == null) throw new InvalidOperationException("UnitOfWork have already been saved."); _transaction.Commit(); _transaction = null; } } }