Net-如何管理NHibernate会话上下文

Net-如何管理NHibernate会话上下文,nhibernate,xsockets.net,Nhibernate,Xsockets.net,我想知道管理NHibernate会话上下文的最佳方法是什么 使用Xsockets控制器中的NH数据层时。 特别是指自托管winservice/console应用程序或Azure worker角色, 其中HTTPContext不可用。 当然,每次调用都有一个创建和处理会话的选项,但这意味着性能会受到影响,因此在某种程度上可以更好地重用会话。 我的控制器为底层NH存储库中的CRUD操作提供API,并在数据库中更新某些记录时将更新推送到相关订阅者 您的想法受到赞赏:因为XSockets具有状态,如果您

我想知道管理NHibernate会话上下文的最佳方法是什么 使用Xsockets控制器中的NH数据层时。 特别是指自托管winservice/console应用程序或Azure worker角色, 其中HTTPContext不可用。 当然,每次调用都有一个创建和处理会话的选项,但这意味着性能会受到影响,因此在某种程度上可以更好地重用会话。 我的控制器为底层NH存储库中的CRUD操作提供API,并在数据库中更新某些记录时将更新推送到相关订阅者


您的想法受到赞赏:

因为XSockets具有状态,如果您在OnOpen事件中打开连接,那么状态将对您的数据库不利,因为只要套接字打开,连接就会保持打开状态。最好是在调用CRUD操作的方法中尽可能简短地使用存储库

在这种情况下,获取存储库实例不应成为瓶颈

我将很乐意检查您可能拥有的任何代码

问候
Uffe

我正在使用StructureMap来处理依赖项,并创建一个嵌套容器来处理每个请求的会话。不必再为了存储会话而干扰CurrentSessionContext或HttpContext


如果将OWIN与WebAPI结合使用,您甚至可以创建一个中间件UnitOfWork。

谢谢Uffe。幸运的是,我只准备编写这个实现,但我希望重用其他服务中使用的数据层。所以您的建议是在每次调用控制器方法时创建和处理会话?NHibernate会话不仅仅是您最可能从池中获得的SQL连接。它正在缓存实体等。。。根据经验,我知道每次创建都非常昂贵,并且在可能的情况下,使用ThreadStatic上下文可以显著提高性能。在使用范围内封装方法中的服务实例时,我从未遇到过任何问题。pastepin上的示例此示例是NInject IOC容器解析服务的示例。我说的是NHibernate会话上下文策略:XSockets具有内置状态,因此我们不需要会话。如果你想使用会话,这可能是可行的。您还可以将连接之间的数据存储在XSockets存储器中。因此,也不需要在那里举行会议。但我猜你在服务中对会话做了些什么?可能是进行长时间讨论的错误论坛…: