最近,我一直在将NHibernate集成到公开多个服务的服务器应用程序中。核心服务管理一个类的多个实例,我知道建议使用每个请求的会话模式。到目前一切尚好。
另一个服务是Site Settings服务,它可以有效地管理单个实例:只有一个SiteSettings实例。我也可以在这个服务中遵循session-per-request模式,但这似乎很奇怪。我真的需要在这里为每个请求创建一个新会话吗?为什么不为服务创建一个会话并继续使用它呢?每请求会话模式的优点之一是,会话最终不会缓存模型中的所有对象。但是,由于我只会在会话中加载单个实例,所以我认为这不应该是一个问题。与ISession相比,我使用IStatelessSession会更好吗?
这里有没有其他使用每个请求的会话的原因?我想到的一个问题是,如果与数据库断开连接,会发生什么情况。即使出现数据库错误,我也可以继续使用相同的会话吗?
顺便说一句,我正在考虑将每个设置存储在它自己的列中,这意味着我必须在更改设置时更新模式。我发现了这篇文章:NHibernate Web Application - Managing User Preferences,其中一条评论反对使用表格来存储这样的配置设置。我很难想出替代方案(缺少序列化整个类并将其存储为blob)。有不同的方法吗?
发布于 2011-03-15 19:15:55
会话不是线程安全的,所以我认为您的单例可能需要多个会话
即使出现数据库错误,我也可以继续使用相同的会话吗?
不,这可能会抛出异常,并且您不应该在异常之后重用会话。我想你应该坚持每个请求的会话模式。
有不同的方法吗?
您可以在每个配置设置中使用不同的行吗?因此,您的User对象应该有一个UserSetting对象的子集。每个UserSetting只是一个键值对。
https://stackoverflow.com/questions/5308179
复制相似问题