질의 캐싱으로 NHibernate (NHibernate.Linq 및 Fluent NHibernate)를 설정했다. session.Save(new Widget())
(예 : INSERT
)을 수행 할 때까지 모든 것이 올바르게 작동합니다. 이 시점 이후에 해당 유형의 모든 쿼리 Widget
은 쿼리 캐시를 잃어 버립니다. 다른 엔티티 유형에 대한 쿼리는 잘 캐시됩니다. 나는 새로운 Transaction
를 시작하면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();
}
}
문제가 지속됩니다. 새로운 Session
을 시작하면 문제가 해결됩니다. 내 이해가 SessionFactory
(Session
아님) 당 재설정 된 두 번째 레벨 캐시 였기 때문에 이상하게 보입니다.
저는이 문제가 중요하다고 생각하지 않지만, 지금은 테스트 중이기 때문에 HashtableCacheProvider
을 사용하고 있습니다.
어떤 오류가 발생 했습니까? – spajce
예외가 발생했다는 의미에서 오류가 아닙니다. 오히려, 두 번째 쿼리 ('var fetched2 = query.FirstOrDefault();')는 쿼리 캐시를 건너 뛰고 예상되는 동작이 아닌 데이터베이스를 직접 방문합니다. –
쿼리 캐시를 활성화 했습니까? 엔티티 캐시와 별도로 처리해야한다고 생각합니다. –