J'essaie d'utiliser un cache de second niveau pour les entités de recherche car il y en a seulement quelques-unes et ces entités ne devraient être modifiées que dans des cas exceptionnels. Si je récupère ces entités avec ICriteria, ces entités sont placées dans le cache de second niveau, mais si je les récupère via ISQLQuery (fonction valeur-table), les entités ne sont pas mises en cache. Appeler .SetCacheable (true) etc n'a aucun effet. Par conséquent, la mise en cache de second niveau avec ISQLQuery n'est-elle pas prise en charge ou il me manque certains paramètres de configuration?Les entités retournées avec ISQLQuery ne sont pas stockées dans le cache de second niveau NHibernate?
Edit:
Exemple - première requête dans l'application IIS ensemble après le redémarrage:
var query = _session.CreateSQLQuery("SELECT {foo.*} fro dbo.foo_GetList()");
query.AddEntity("foo", typeof(Foo));
query.SetCacheable(true);
query.List<Foo>();
Lorsque le code ci-dessus fonctionne, je ne vois rien ajouté dans le cache (par exemple, pas NHibernate.Caches .SysCache.SysCache - ajout de nouvelles données dans le journal NHibernate). Les appels suivants tels que _session.Get (id) effectuent une nouvelle sélection. Si je remplace ce qui suit par
var criteria = _session.CreateCriteria<Foo>();
criteria.List<Foo>();
alors les entités sont mises en cache.
En outre, il semble pour moi lors de l'utilisation ISQLQuery objets retournés ne sélectionne pas les entités dépendantes à partir du cache, mais les sélectionner à nouveau.