我有 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
,因为我现在只是在测试。