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
私の理解では、2番目のレベルのキャッシュは(ではなく)ごとにリセットされるため、これはちょっと奇妙に思えSession
ます。
これは重要ではないと思いますが、HashtableCacheProvider
今テストしているだけなので、を使用しています。