在控制器和存储库的上下文中使用Nhibernate会话很难

时间:2011-10-22 15:09:55

标签: asp.net asp.net-mvc-3 nhibernate

我尝试使用Nhibernate和Structuremap以及Repository模式构建ASP.NET MVC应用程序。

通过我对该项目的初步处理以及随后的阅读,我希望将Nhibernate会话限制在存储库中,并将存储库限制在控制器中。但与此同时,关于事务,我想将它与存储库方法分开(即我只想调用session.Save())。

但似乎需要Controller了解会话,以便我可以在任何Controller操作之前在会话上执行任何事务设置,并在使用类似操作之后对数据库执行任何持久性(即ActionFilterAttribute方法BeforeExecution或在MvcApplication中执行AfterExecuted或BeginRequest / EndRequest事件。

所以在我看来,我必须将当前的NHibernate会话提供给Controller以及Repository,这样我就可以在控制器上发生某些操作/结果时对会话采取行动。

这是我能解决这个问题的唯一方法吗?

我已经阅读了Ayende的博客,以及各种不同的方法,但在使用存储库模式的情况下,这几乎是必须的。我希望能够以最可插拔的方式设置Nhibernate / StructureMap,因此除了为特定项目定义FluentNhibernate配置之外,将其添加到另一个MVC项目的布线非常少。

1 个答案:

答案 0 :(得分:0)

没关系。您需要根据请求打开会话,并在请求结束时关闭它。