在Web应用程序(特别是MVC)中打开和关闭NHibernate ISession的位置?

时间:2009-11-10 19:34:07

标签: nhibernate session orm

在Web应用程序中使用NHibernate时这是一个非常基本的问题,但在搜索Web时我没有看到任何商定的最佳实践。我在很多不同的地方看到过它:

在Repository方法中创建和处理 - 这对我来说似乎很愚蠢,因为当你得到对象时它已经分离了。

在控制器操作的开始和结束时 - 这似乎更好,但是每次操作都必须这样做很烦人。

在应用程序级别,在global.asax beginrequest和endrequest - 这似乎是最好的主意,但我再次看到一些在Init中创建的示例而不是beginrequest(例如,尖锐的架构) - 虽然我不确定为什么。

也许有其他方法?
IoC容器能否以某种方式提供帮助?
也许你知道网上关于这个的好资源?
而且 - 你用什么方法?

由于

2 个答案:

答案 0 :(得分:6)

Session per Request可能是最常用的方法。

答案 1 :(得分:0)

  

我已经看到一些在Init中创建的示例而不是beginrequest(例如,尖锐的架构) - 虽然我不确定为什么。

在IIS 7中您可以访问Global.asax的Init事件中的会话状态。这就是为什么尖锐的拱门使用beginrequest。

至于会话管理我同意你的看法 - Global.asax是最适合它的地方。如果您希望在图层之间实现干净分离并从UI中删除DAL设置,则可以使用HttpModule进行事件。

您也可以查看ayende's blog。它解释了他的会话管理方式