ASP.NET与Web服务,NHibernate会话设计



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

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

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

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

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

最新更新