1

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

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

4

1 回答 1

1

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

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

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

于 2012-11-23T14:27:43.373 回答