我正在寻找一种处理NHibernate中近静态数据的好方法 - 其中近静态数据是配置/查找数据,通常通过应用程序的管理部分(很少)改变。
由于这些数据不经常更改并且可能非常大 - 并且对于大多数应用程序而言应该是“不可变的”,因此将其加载到NHibernate会话中以检查是否存在刷新等似乎很愚蠢。
我可以想到一些可能的解决方案:
在应用程序的正常部分加载数据后使用Evict将其从更改跟踪/刷新中排除。依靠二级缓存快速检索。
为应用程序的正常部分创建自己的缓存并在那里存储分离的实体,在管理员部分写入时更新缓存。
使用FlushMode.Never的第二个会话加载应用程序正常部分的数据。
在NH 3.0中使用Criterias / QueryOver以只读方式检索数据。
???
对于大多数应用程序来说,它似乎不是一个相当普遍的问题,处理它的最佳方法是什么?
答案 0 :(得分:1)
我会打开一个单独的会话并在需要时加载所需的配置数据,然后关闭会话。如果经常使用数据,可以将其缓存在某处或保持单独的会话打开以便于第一级缓存。
答案 1 :(得分:1)
我会采用双管齐下的方法。首先,您可以使用二级缓存来允许所有会话访问相同的数据实例。其次,我会使用IStatelessSession
来检索它。这将阻止会话实际跟踪对象。