main
 1using gorilla.commons.utility;
 2using ISession = NHibernate.ISession;
 3using ITransaction = NHibernate.ITransaction;
 4
 5namespace presentation.windows.server.orm.nhibernate
 6{
 7    public class NHibernateUnitOfWork : IUnitOfWork
 8    {
 9        readonly ISession session;
10        readonly IContext context;
11        ITransaction transaction;
12
13        public NHibernateUnitOfWork(ISession session, IContext context)
14        {
15            this.session = session;
16            this.context = context;
17            transaction = session.BeginTransaction();
18        }
19
20        public void Dispose()
21        {
22            if (!transaction.WasCommitted && !transaction.WasRolledBack)
23            {
24                transaction.Rollback();
25            }
26            session.Dispose();
27            context.remove(new TypedKey<ISession>());
28        }
29
30        public void commit()
31        {
32            if (is_dirty()) transaction.Commit();
33        }
34
35        public bool is_dirty()
36        {
37            return session.IsDirty();
38        }
39    }
40}