针对桌面应用程序的GetCurrentSession会话范围

时间:2010-02-08 18:47:19

标签: nhibernate architecture

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

我正在寻找有经验的nhib开发者,可能有任何意见,提示和/或链接re:
(1)为什么这对于桌面应用程序来说是好的方法
(2)嘲笑单元测试
(3)当你想要一个IStatelessSession时该怎么办 (4)当应用程序需要Web功能时,它如何扩展。

1 个答案:

答案 0 :(得分:1)

1)您可能希望在会话范围方面获得更多灵活性。请查看What should be the lifetime of an NHibernate session?了解更多信息

2)你可以对这段代码进行单元测试,假设你抽象了对sessionFactory的调用,但是,我认为你应该再考虑一下会话范围

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

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

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