我有一些经常在同一会话中访问的大型实体。例如,在我的应用程序中,有一个报告页面,其中包含动态生成的图表图像。对于此页面上的每个图表图像,客户端向相应的控制器发出请求,并且控制器使用某些实体生成图像。 我可以使用asp.net的会话字典来“缓存”这些实体,或者依赖于nhibernate的二级缓存支持,例如使用缓存查询。
您有什么看法?
顺便说一句,我将使用共享主机,是nhibernate的二级缓存主机友好吗?
感谢。
答案 0 :(得分:2)
我认为你应该使用NHibernate的缓存。如果用户逐个请求逐个获取每个实体,那么您可能应该使用不同的NHibernate ISession实现来获取它们(因为每个Web请求策略的会话)。
此外,当使用Nhibernate缓存时,您不会遇到并发问题的麻烦 - 它会为您处理它们。
答案 1 :(得分:0)
请注意将实体(从您加载的会话中)缓存到静态变量中,然后由另一个会话访问(例如,从您制作的缓存系统中提取)。
实体实例与会话相关联,因此不应跨越会话边界混合和匹配实例。
我之前通过创建一个简单版本的类(不是NH Session识别)并缓存该基本类来解决这个问题。
或者,使用没有此问题的二级缓存。