我有 NHibernate (带有NHibernate.Linq和Fluent NHibernate)设置了查询缓存。一切正常,直到我做一个session.Save(new Widget())(即 SQL INSERT)。在那之后,该类型Widget的所有查询都会错过查询缓存。其他实体类型的查询被缓存得很好。
using (ISession session = MySessionFactory.OpenSession())
{
using (var transaction = session.BeginTransaction())
{
// this INSERT screws things up
var widget = new Widget {Name = "Foo"};
session.Save(widget);
var query = (from w in session.Query<Widget>().Cacheable()
where w.Name == "Bar"
select w);
var fetched1 = query.FirstOrDefault();
var fetched2 = query.FirstOrDefault(); // miss?!
transaction.Commit();
}
}
如果我开始一个新Transaction的,问题仍然存在。如果我开始一个新Session的,问题就会消失。这似乎有点奇怪,因为我的理解是二级缓存每SessionFactory(不是Session)重置。
我认为这并不重要,但我正在使用HashtableCacheProvider,因为我现在只是在测试。