【问题标题】:ASP.NET with webservices, NHibernate session design带有 Web 服务的 ASP.NET,NHibernate 会话设计
【发布时间】:2012-11-23 14:15:09
【问题描述】:

我正在构建一个带有 WCF Web 服务后端的 ASP.NET MVC 网站,该后端通过 NHibernate 与数据库通信。目前,作为 POC,我有一个名为 UserService 的 Web 服务,其中包含我需要的所有方法。我遇到的问题是我有一个包装 NHibernate 配置的 DataRepository 对象。当我创建一个新的数据存储库对象时,它会加载 NHibernate 配置和映射以及缓存等。对于我在用户会话中的网站,我希望在他们的会话期间保持这个 DataRepository 对象打开,因为保持它没有意义在每次调用的基础上重新配置 NHibernate,我希望相同的数据存储库可用于所有 Web 服务方法,以从 NHibernate 缓存中受益。

这里的答案是在 UserService.cs 类级别创建一个静态 DataRepository 对象并将网站配置为基于每个会话进行实例化,这是否意味着每个用户会话都包含它自己的静态数据存储库对象他们的会议?或者,还有更好的方法?上述方法有什么我没有想到的吗?

【问题讨论】:

    标签: asp.net web-services nhibernate caching


    【解决方案1】:

    我会建议一个更好的方法。不要共享存储库,共享hibernate的会话并使其可注入到存储库中。

     public class DataRepository {
         public DataRepository ( Session session ) {
         }
     }
    

    通过这种方式,您可以精确控制存储库和会话的生命周期。特别是,您可以拥有一个共享会话(在请求范围内),但始终创建​​一个新的(临时)存储库。

    【讨论】:

    • 感谢您的回复。您将在哪里创建和存储对 NHibernate 会话的引用?
    • 我个人会使用带有注入工厂和会话生命周期管理器的 IoC 容器。大多数 IoC 容器都可以做到这一点。如果您不使用或不想使用其中之一,您可以使用CurrentSessionContext.Bind (dotnetslackers.com/articles/aspnet/…),甚至将会话存储在您自己的HttpContext.Current.Items 容器中。
    猜你喜欢
    • 2015-02-10
    • 1970-01-01
    • 2010-12-21
    • 1970-01-01
    • 2020-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-14
    相关资源
    最近更新 更多