我需要一些关于重构的见解和想法,我将要对我们的Web应用程序做。

我们最初通过使用httpapplication中的on_beginrequest / on_endrequest使用nhibernate和activerecord使用nhibernate和activerecord的每个会话模式。后来,我们意识到,与DB相关的任何例外都被放在我们的单轨字幕外面,这意味着我们的救助并没有开始。行动,在某些情况下是可取的。

因此,我们将其重写以在我们的基本控制器中在initialize() / contectionalize()中创建会话,并将它们放在我们基本控制器的distose()中。我们还会在救援控制器中回滚会话,以防止对DB的任何一半书面更改。到目前为止,一切都很好。在dispose()中进行操作的原因是因为我们希望它通过视图渲染生活,因为懒惰的原因以及需要进行会话的查看程序(我们可以切换到工作单位视图组件,但它们似乎没有dispose()...)

但是,我正在遇到一些僵局问题,即我们开始在DB中进行过渡,而这些问题没有被滚回去,也无法承诺,我无法解决问题,主要是因为我们用这种方法造成的混乱。 。

所以我找到了这篇文章: http://hackingon.net/post/nhibernate-session-per-request-with-aspnet-mvc.aspx

我想,“过滤器,我们也可以在单轨铁路上使用它!”,因为它可以进行反应和后续发展。

然后我的问题是:

  1. 如果过滤器中发生异常,会发生什么?
  2. 即使在动作或渲染中发生例外,也会在后期发生大火吗?
  3. 您是否建议这种方法,如果没有,您的建议是什么?

任何指针都非常感谢!

有帮助吗?

解决方案

  1. 您需要一个应用程序错误处理程序来照顾异常处理。

  2. 附加调试器并找出答案。

  3. 可能不是(即使这是我的文章)。它与RenderAction不起作用。最好使用IOC容器来控制连接的寿命。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top