Używamy NHibernate 4 w naszej aplikacji asp.net mvc 4 (.net 4). O ile mogę powiedzieć, zachowanie NHibernate 4 zmieniło się nieco, jeśli chodzi o buforowanie drugiego poziomu.NHibernate 4: Wykorzystanie pamięci podręcznej drugiego poziomu dla zbiorów leniwych dla dzieci
następujące zachowanie wydaje się zmieniły (proszę mnie poprawić, jeśli się mylę):
- Nie ma już transakcji potrzebne do korzystania z drugą pamięć podręczną poziomu
- Kiedy wykonać kwerendy podobne (Hibsession .Query(). Gdzie (x => x.Nazwa == "x"). ToList()), następnie zapyta o jednostkę typu entreak. We wcześniejszych wersjach NHibernate - jeśli dobrze pamiętam - tylko identyfikatory jednostki zostałyby odzyskane.
Wydaje mi się, że drugi poziom ma zastosowanie jedynie w następujących przypadkach:
using (var hibSession = SessionFactory.OpenSession())
{
// Second level cache working
var entity = hibSession.Get<ChachedEntity>(7); // second level cache working
var parent = entity.ParentElement; // second level cache working because n:1
// Probably working (not tested)
var elements = hibSession.Query<ChachedEntity>().Cacheable().Take(30).ToList(); // guessed behaviour: query-cache selects id's and then then uses second level cache
// second level cache NOT Working
var children = entity.ChildCollectionWithCachableEntities; // second level cache NOT working because 1:n (!!)
}
Moje pytania są teraz:
- Gdzie jest zachowanie NHibernate 4 drugiego poziomu pamięci podręcznej z opisem (lub przynajmniej zmiany do udokumentowanej wersji 3)
- Czy można używać pamięci podręcznej drugiego poziomu do leniwego ładowania elementów potomnych? (Lub przynajmniej zapewnić, że tylko ID są ładowane i wtedy drugi cache poziomu zmaterializować podmioty)
góry dzięki