这是一个很好的解决方案来处理NHibernate Isession作为PerWebRequest

时间:2010-02-16 21:17:17

标签: nhibernate session castle-windsor

我一直在使用NHibernate会话管理,现在最终有两种可能的解决方案来满足每个Web请求的会话。

我在ASPNET mvc项目中使用Windsor进行IoC

首先解决方案是在begin_request中打开一个会话,然后在end_request中再次关闭/处理它。在温莎设置我会 container.Register(Component.For()。UsingFactoryMethod(()=> SessionFactory.GetCurrentSession())。LifeStyle.Transient;

此解决方案为每个请求创建会话,并通过GetCurrentSession共享它。

第二个解决方案是使用Windsor,如

container.Register(Component.For()。UsingFactoryMethod(()=> SessionFactory.OpenSession())。LifeStyle.PerWebRequest);

这也可以为每个Web请求和支持构造函数注入提供一个会话。它有点简单,但我需要第二个意见。

请告诉我您更喜欢使用的内容,

最好的问候 拉斯穆斯

2 个答案:

答案 0 :(得分:3)

我不推荐这两种解决方案中的任何一种。不要试图重新发明轮子,而是使用NHibernate facility

答案 1 :(得分:1)

我使用一个工作单元,我在容器中为每个Web请求配置。工作单元不仅创建会话,还提交和回滚事务。使用工作单元的主要原因是使数据库更稳定。有关工作单元模式的更多信息,请参见here

public interface INHiberanteUnitOfWork
{
    ISession session { get; }
    void Commit();
    void RollBack();
}