我最近发现了nhibernate会话范围和上下文。 似乎使用这个用于桌面应用程序就像使用ThreadStaticSessionContext引导配置,将会话工厂绑定到上下文,然后根据需要调用sessioonFactory.GetCurrentSession()一样简单。
我正在寻找有经验的nhib开发者,可能有任何意见,提示和/或链接re:
(1)为什么这对于桌面应用程序来说是好的方法
(2)嘲笑单元测试
(3)当你想要一个IStatelessSession时该怎么办
(4)当应用程序需要Web功能时,它如何扩展。
答案 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(),那就太糟糕了。如果它正在创建一个新会话(仅在当前上下文中使用),那很好。