我正在构建一个带有WCF Web服务后端的ASP.NET MVC网站,该后端通过NHibernate与数据库通信。目前作为POC,我有一个名为UserService的Web服务,其中包含我需要的所有方法。我遇到的问题是我有一个包装NHibernate配置的DataRepository对象。当我创建一个新的数据存储库对象时,它会加载NHibernate配置,映射和缓存等。对于我在用户会话中的网站,我想保持这个DataRepository对象在其会话的生命周期内保持打开状态,因为它保持不变在每次调用的基础上重新配置NHibernate,我希望所有Web服务方法都可以使用相同的数据存储库,以便从NHibernate缓存中受益。
这里的答案是在UserService.cs类级别创建一个静态DataRepository对象,并将网站配置为基于每个会话进行实例化,这意味着每个用户会话都包含它自己的静态datarepository对象。他们的会议?或者,还有更好的方法?上述方法有什么我没有想到的吗?
答案 0 :(得分:1)
我建议采用更好的方法。不要共享存储库,共享hibernate的会话并将其注入存储库。
public class DataRepository {
public DataRepository ( Session session ) {
}
}
通过这种方式,您可以精确控制存储库和会话的生命周期。特别是,您可以拥有一个共享会话(在请求范围内),但始终创建一个新的(瞬态)存储库。