2010-02-08 56 views
1

我最近发现了nhibernate会话范围和上下文。它似乎似乎使用这个用于桌面应用程序就像使用ThreadStaticSessionContext引导配置一样简单,将会话工厂绑定到上下文,然后根据需要调用sessioonFactory.GetCurrentSession()。GetCurrentSession会话作用于桌面应用程序

我要找有经验的开发者nhib可能有任何意见,建议,和/或重新链接:
(1)为什么这是或不是桌面应用程序
(2)单位一个好方法(3)当你想要一个IStatelessSession时怎么做
(4)当应用程序需要web功能时,这是如何缩放的。

回答

1

1)您可能希望在会话范围方面有更多灵活性。看看What should be the lifetime of an NHibernate session?更多的一些信息

2)您可能单元测试的代码假设你抽象掉一个SessionFactory的电话,但同样,我认为你应该考虑会话范围多一点

3)这是一个很好的问题,这个实现

4)你将无法使用Web应用程序的ThreadStaticSessionContext。您很可能想要为此使用Session-Per-Request,在请求开始时创建一个新会话,并在最后处理它。

我会推荐使用DI抽象ISession的创建。如果你的代码在执行代码之前调用XYZ.GetCurrentSession(),那很糟糕。如果它正在创建一个新的会话(仅在当前上下文中使用),那很好。

+0

感谢您的答复 - 在其他SO问题中的一些很好的信息。仍然让我怀疑,上下文和GetCurrentSession可能更多,特别是ThreadStaticContext。干杯 – Berryl 2010-02-09 02:33:57