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

Nhibernate 桌面应用程序的GetCurrentSession会话范围,nhibernate,architecture,Nhibernate,Architecture,我最近发现了nhibernate会话范围和上下文。对于桌面应用程序来说,使用它似乎很简单,只需使用ThreadStaticSessionContext引导配置,将会话工厂绑定到上下文,然后根据需要调用SessionFactory.GetCurrentSession() 我正在寻找经验丰富的nhib开发人员,他们可能有任何意见、提示和/或链接: (1) 为什么这是或不是桌面应用程序的好方法 (2) 使用模拟进行单元测试 (3) 需要IStatelessSession时要做什么 (4) 当应用程序需

我最近发现了nhibernate会话范围和上下文。对于桌面应用程序来说,使用它似乎很简单,只需使用ThreadStaticSessionContext引导配置,将会话工厂绑定到上下文,然后根据需要调用SessionFactory.GetCurrentSession()

我正在寻找经验丰富的nhib开发人员,他们可能有任何意见、提示和/或链接:
(1) 为什么这是或不是桌面应用程序的好方法
(2) 使用模拟进行单元测试
(3) 需要IStatelessSession时要做什么
(4) 当应用程序需要web功能时,它是如何扩展的。

1)您可能希望在会话范围方面有更多的灵活性。查看更多信息

2) 假设您抽象掉了对sessionFactory的调用,您可以对这段代码进行单元测试,但是,我认为您应该进一步研究会话范围

3) 对于这个实现来说,这是一个很好的问题

4) 您将无法在web应用程序中使用ThreadStaticSessionContext。您很可能希望为每个请求使用一个会话,在请求开始时创建一个新会话,并在请求结束时处理它

我建议使用DI抽象出ISession的创建。如果您的代码在执行代码之前调用XYZ.GetCurrentSession(),这是错误的。如果它正在创建一个新的会话(只在当前上下文中使用),这很好。

1)您可能希望在会话范围方面有更多的灵活性。查看更多信息

2) 假设您抽象掉了对sessionFactory的调用,您可以对这段代码进行单元测试,但是,我认为您应该进一步研究会话范围

3) 对于这个实现来说,这是一个很好的问题

4) 您将无法在web应用程序中使用ThreadStaticSessionContext。您很可能希望为每个请求使用一个会话,在请求开始时创建一个新会话,并在请求结束时处理它


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

感谢您的回答-在另一个问题中提供了一些很好的信息。仍然让我怀疑,上下文和GetCurrentSession一般来说,特别是ThreadStaticContext可能有更多的功能。干杯谢谢你的回答-在另一个问题中有一些好的信息。仍然让我怀疑,上下文和GetCurrentSession一般来说,特别是ThreadStaticContext可能有更多的功能。干杯