代码之家  ›  专栏  ›  技术社区  ›  UpTheCreek

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

  •  9
  • UpTheCreek  · 技术社区  · 16 年前

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

    在存储库方法中创建和释放 -我觉得这很愚蠢,因为当你拿到物体的时候,它已经被分离了。

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

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

    也许还有其他方法?
    IOC容器在某种程度上有帮助吗?
    也许你知道网上有一个很好的资源?
    你用什么方法?

    谢谢

    2 回复  |  直到 13 年前
        1
  •  6
  •   sduplooy    13 年前

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

        2
  •  0
  •   Sly    16 年前

    我看到过一些在init中创建的例子,而不是beginrequest(例如夏普体系结构),尽管我不确定为什么。

    在IIS 7中,您可以在global.asax的init事件中访问会话状态。这就是为什么锋利的拱门使用beginrequest。

    至于会话管理,我同意你的看法-global.asax是最好的选择。事件如果要在层之间进行干净的分隔并从用户界面中删除DAL设置,则可以使用 HttpModule 为了它。

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