Utilizziamo NHibernate 4 nella nostra applicazione asp.net mvc 4 (.net 4). Per quanto posso dire il comportamento di NHibernate 4 è cambiato un po 'quando si tratta di cache di secondo livello.NHibernate 4: uso della cache di secondo livello per le raccolte figlio a carico lento
il seguente comportamento sembra aver cambiato (per favore correggetemi se sbaglio):
- Non v'è più un'operazione necessaria quando si utilizza la cache di secondo livello
- Quando eseguo una query come (Hibsession .Query(). Dove (x => x.Name == "x"). ToList()), quindi eseguirà una query per l'entità corrispondente. Nelle precedenti versioni di NHibernate - se ricordo correttamente - sarebbero stati recuperati solo gli id dell'entità.
Mi sembra che di secondo livello si applica solo nei casi seguenti:
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 (!!)
}
Le mie domande sono ora:
- Dove è il comportamento della cache di secondo livello NHibernate 4 descritto (o almeno modifiche alla versione 3 documentate)
- È possibile utilizzare la cache di secondo livello per gli elementi figlio di caricamento lento? (O almeno garantire che solo i id vengono caricate e poi la seconda cache di livello materializzano entità)
Grazie in anticipo