我使用查詢緩存設置NHibernate(使用NHibernate.Linq和Fluent NHibernate)。一切工作正常,直到我做了session.Save(new Widget())
(即SQL INSERT
)。在那之後,該類型Widget
上的所有查詢都將錯過查詢緩存。其他實體類型的查詢緩存得很好。NHibernate - 在保存新實體後,查詢未命中查詢緩存
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
,因爲我現在只是在測試。
什麼樣的錯誤是發生爵士? – spajce
從異常被拋出的意義上講,這不是一個錯誤。相反,第二個查詢('var fetched2 = query.FirstOrDefault();')跳過查詢緩存並直接訪問數據庫(這不是預期的行爲)。 –
您是否啓用了查詢緩存?我認爲你必須從實體高速緩存中分離出來。 –