后来,我看了Cuyahoga开源项目中他的Session管理,他使用的“session-per-request”这种模式。 从字面上理解就是他为每个Request创建一个Session,直到这个请求销毁,那么这个Session也就Close了。 而Cuyahoga他的做法和session-per-request有点不同地方就是,他为每个Request都创建了一个CoreRepository对象,CoreRepository是系统所需要的数据处理服务的类。 他的做法是先创建了HttpModule(NHSessionModule)用来创建CoreRepository对象和销毁CoreRepository对象,如下: PRivate void Context_BeginRequest(object sender, EventArgs e) { // Create the repository for Core objects and add it to the current HttpContext. CoreRepository cr = new CoreRepository(true); HttpContext.Current.Items.Add("CoreRepository", cr); }
private void Context_EndRequest(object sender, EventArgs e) { // Close the NHibernate session. if (HttpContext.Current.Items["CoreRepository"] != null) { CoreRepository cr = (CoreRepository)HttpContext.Current.Items["CoreRepository"]; cr.CloseSession(); } }