Monorail、nhibernate和每请求会话模式
我需要一些关于我将要对我们的web应用程序进行重构的见解和想法 我们最初使用NHibernate和ActiveRecord的每请求会话模式,在HttpApplication中使用On_BeginRequest/On_EndRequest来创建和处理会话。后来,我们意识到,任何与DB相关的异常都被抛出了monorail上下文之外,这意味着我们的救援没有起作用。另一个副作用是,我们没有选择在任何操作中完全跳过NHibernate会话的创建,这在某些情况下是可取的 因此,我们重写了它,在基础控制器的Initialize()/Contextualize()中创建会话,并在基础控制器的Dispose()中释放它们。我们还可以在rescue控制器中回滚会话,以防止对数据库进行任何半写式更改。到目前为止,一切顺利。在Dispose()中执行此操作的原因是,我们希望它在视图渲染过程中始终有效,因为延迟加载的原因以及需要获取会话的viewcomponents(我们可以切换到viewcomponents的工作单元,但它们似乎没有Dispose()…) 然而,我遇到了一些死锁问题,我们在DB中开始了没有回滚或提交的事务,我无法解决它,主要是因为我们用这种方法造成了混乱 所以我发现了这篇文章: 我想,“过滤器,我们也可以在MonoRail中使用它!”因为它可以在渲染前和渲染后起作用 我的问题是:Monorail、nhibernate和每请求会话模式,nhibernate,castle-monorail,session-per-request,Nhibernate,Castle Monorail,Session Per Request,我需要一些关于我将要对我们的web应用程序进行重构的见解和想法 我们最初使用NHibernate和ActiveRecord的每请求会话模式,在HttpApplication中使用On_BeginRequest/On_EndRequest来创建和处理会话。后来,我们意识到,任何与DB相关的异常都被抛出了monorail上下文之外,这意味着我们的救援没有起作用。另一个副作用是,我们没有选择在任何操作中完全跳过NHibernate会话的创建,这在某些情况下是可取的 因此,我们重写了它,在基础控制器的I
您是否尝试过使用NHibernate工具?我们正在使用ActiveRecordFacility,但我对TransactionScope的方式感到不舒服,因为我不知道创建或处置的会话。我宁愿有自己的包装器,它使用sessionFactory并根据需要创建会话。我希望能够在同一个包装器中实现“每请求会话”和“工作单元”模式。在这种情况下,NHibernate设施将如何帮助我?抱歉,没有提到ActiveRecord。是的,要么是ActiveRecordFacility要么是NHibernateFacility,不是两者都有。至于事务,您是否尝试过自动事务管理工具?我知道我们已经尝试过,但在配置中我看不到任何提及,所以我猜我们已经删除了它。然而,我试图避免太多的黑魔法,因为我觉得我们已经失去了对我们的会议实际流程的跟踪。我们还希望从活动记录迁移出去。