我一直在使用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请求和支持构造函数注入提供一个会话。它有点简单,但我需要第二个意见。
请告诉我您更喜欢使用的内容,
最好的问候 拉斯穆斯答案 0 :(得分:3)
我不推荐这两种解决方案中的任何一种。不要试图重新发明轮子,而是使用NHibernate facility。
答案 1 :(得分:1)
我使用一个工作单元,我在容器中为每个Web请求配置。工作单元不仅创建会话,还提交和回滚事务。使用工作单元的主要原因是使数据库更稳定。有关工作单元模式的更多信息,请参见here。
public interface INHiberanteUnitOfWork
{
ISession session { get; }
void Commit();
void RollBack();
}