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今テストしているだけなので、を使用しています。