在Web应用程序中使用FluentNHibernate,我创建了一个单例SessionFactory类,具有以下功能:
SessionFactory.Instance //returns ISessionFactory
按以下方式打开/关闭会话是常见/最佳做法吗?
using(ISession session = SessionFactory.Instance.OpenSession())
{
using(ITransaction transaction = session.BeginTransaction())
{
//some operation
}
}
上面的代码将存在于给定实体的相应存储库类中。
我注意到有一个主题是创建一个HttpModule来在应用程序的开始和结束时打开会话,但我想知道这是情境还是更常见。
更新
继续使用HttpModule,我有类似的想法:
使用存储库类,我基本上执行以下操作(config使用WebSessionContext):
using(ISession session = SessionFactory.Instance.GetCurrentSession())
{
using(ITransaction transaction = session.BeginTransaction())
{
//some operation
}
}
答案 0 :(得分:9)
如果您正在使用Web应用程序,我建议使用HttpModule打开会话并在请求周期关闭它。会话工厂我可能会在Application_Start上实例化。
对于存储库对象,我会通过构造函数将会话传递给它。
我个人认为存储库对象没有足够的信息来决定如何处理会话。
答案 1 :(得分:8)
我认为这取决于你的谈话
了解有关look here
的更多信息以下是有关实施的一些链接
注意会话可以注入Doa / respository。
对于完整的体系结构,请查看sharp architecture<这是基于最佳实践,我会高度重新评估
Summer of Nhibernate ep 13,与Asp.Net的会话