Web 中的 NHibernate 会话管理 API

NHibernate Session Management in Web API

我正在搜索可以在 Web api 项目中管理 nhibernate 会话的不同方法。我找到的最简单的解决方案是在请求开始时将会话绑定到 HttpContext。其他更复杂的解决方案使用依赖注入。

我的问题是有什么理由不选择将会话绑定到 BeginRequest 上的 HttpContext 的最简单方法吗?

My question is there any reason for not choosing the easiest way of binding the session to HttpContext on BeginRequest?

原因是 Web API 旨在与 OWIN 一起使用。这意味着它可以托管在 ASP.NET 之外,而 HttpContextBeginRequest 之类的概念根本不存在。因此,使用它们,您将应用程序永远绑定到 ASP.NET 主机,这正是 Web 的设计者 API 试图通过将其移植到 OWIN 中间件来避免的。

因此您可以使用 HttpRequestMessage.Properties 字典来存储您的 NHibernate 会话并实现每个请求的生命周期。