我使用 Linq 表达式查询我的 NHibernate 数据源。我遇到的问题是,在比较中没有两个表达式的调用(或评估,抱歉词汇量不好)匹配。因此,NHibernate 经常使用相同的参数执行相同的 SQL。
我通过使用 NHibernate 缓存解决了这个问题,像这样流畅地配置:
Fluently.Configure().Database(MsSqlConfiguration.MsSql2008
.ConnectionString(c => c.Is(cStr))
.ShowSql())
.Mappings(x => x.FluentMappings.AddFromAssemblyOf<MyClassMap>())
.Cache(x=>x.UseQueryCache()
.ProviderClass("NHibernate.Cache.HashtableCacheProvider"))
我稍后会照顾提供者,这样它就不会最终投入生产。接下来,我的所有查询都表示为可缓存的:
session.Query<MyClass>().Cacheable().Where(filter).ToList();
据我所知,缓存查询发生在二级缓存中,它有一个每个 SessionFactory 范围。另一方面,这意味着为了重新加载我的应用程序数据,我必须重新启动 SessionFactory,我认为这比对会话执行相同操作要昂贵得多。
是一种有效的方法来缓存查询而不弄乱 SessionFactory(不是字面意思,你知道我的意思)吗?