using System; using System.Collections; using System.Text; using System.Web; using BDT3.BL; namespace BDT3.Web { /// /// Implements the Open-Session-In-View pattern using . /// Assumes that each HTTP request is given a single transaction for the entire page-lifecycle. /// Inspiration for this class came from Ed Courtenay at /// http://sourceforge.net/forum/message.php?msg_id=2847509. /// public class NHibernateSessionModule : IHttpModule { public void Init(HttpApplication context) { context.BeginRequest += new EventHandler(BeginTransaction); context.EndRequest += new EventHandler(CommitAndCloseSession); } /// /// Opens a session within a transaction at the beginning of the HTTP request. /// This doesn't actually open a connection to the database until needed. /// private void BeginTransaction(object sender, EventArgs e) { NHibernateSessionManager.Instance.BeginTransaction(); } /// /// Commits and closes the NHibernate session provided by the supplied . /// Assumes a transaction was begun at the beginning of the request; but a transaction or session does /// not *have* to be opened for this to operate successfully. /// private void CommitAndCloseSession(object sender, EventArgs e) { try { NHibernateSessionManager.Instance.CommitTransaction(); } finally { NHibernateSessionManager.Instance.CloseSession(); } } public void Dispose() { } } }