我想知道在使用来自 Xsockets 控制器的 NH 数据层时管理 NHibernate 会话上下文的最佳方法是什么。特别是我指的是自托管的 winservice/console 应用程序或 Azure 辅助角色,其中 HTTPContext 不可用。当然,每次调用都可以创建和处理会话,但这意味着性能下降,因此以某种方式更好地重用会话。我的控制器为底层 NH 存储库中的 CRUD 操作提供 API,并在数据库中更新某些记录时将更新推送给相关订阅者。
您的想法表示赞赏:)
我想知道在使用来自 Xsockets 控制器的 NH 数据层时管理 NHibernate 会话上下文的最佳方法是什么。特别是我指的是自托管的 winservice/console 应用程序或 Azure 辅助角色,其中 HTTPContext 不可用。当然,每次调用都可以创建和处理会话,但这意味着性能下降,因此以某种方式更好地重用会话。我的控制器为底层 NH 存储库中的 CRUD 操作提供 API,并在数据库中更新某些记录时将更新推送给相关订阅者。
您的想法表示赞赏:)
由于 XSockets 具有状态,因此如果您在 OnOpen 事件中打开连接,则对您的数据库不利,因为只要套接字打开,连接就会保持打开状态。最好只在调用 CRUD 操作的方法中尽可能简短地使用存储库。
在这种情况下,获取存储库的实例不应该成为瓶颈。
我很乐意查看您可能拥有的任何代码。
问候乌夫
我正在使用 StructureMap 来处理依赖项并创建一个 NestedContainer 来处理每个请求的会话。不必再为了存储会话而弄乱 CurrentSessionContext 或 HttpContext 了。
http://structuremap.github.io/the-container/nested-containers/
如果您将 OWIN 与 WebAPI 一起使用,您甚至可以创建一个中间件 UnitOfWork。