最近我一直在将NHibernate集成到我们的服务器应用程序中,该应用程序公开了多个服务。核心服务管理一个类的多个实例,我理解建议使用每个请求的会话模式。到目前为止一切都很好。
其他服务之一是网站设置服务,它有效地管理单例:只有一个SiteSettings实例。我也可以使用此服务来遵循每个请求的会话模式,但这看起来很奇怪。我真的需要在这里为每个请求创建一个新会话吗?为什么不为服务创建单个会话并继续使用它?每个请求会话模式的一个优点是会话最终不会缓存模型中的所有对象。但是,由于我只会在会话中加载一个实例,我认为这不应该是一个问题。我会更好地使用IStatelessSession而不是ISession吗?
是否还有其他理由在此处使用会话请求?想到的一个问题是在断开DB的情况下会发生什么。即使出现数据库错误,我可以继续使用相同的会话吗?
顺便说一句,我在考虑将每个设置存储在自己的列中,这意味着我必须在设置更改时更新架构。我发现这篇文章:NHibernate Web Application - Managing User Preferences,其中一条评论反对使用表来存储此类配置设置。我很难想出替代方案(没有序列化整个类并将其存储为blob)。有不同的方法吗?
答案 0 :(得分:0)
会话不是线程安全的,所以我认为你想要一个以上的单身人士
即使出现数据库错误,我可以继续使用相同的会话吗?
不,可能会抛出异常,并且您不应该在异常后重用会话。恕我直言,你应该坚持每个请求模式的会话。
有不同的方法吗?
您可以为每个配置设置使用不同的行吗?因此,您的User对象将具有UserSetting对象的子集合。每个UserSetting都只是一个键值对。