2010-04-04 6 views
2

La page maître de mon application Web procède à l'authentification et charge l'entité utilisateur à l'aide d'un Get.Load vs Get in Nhibernate

Après cela, chaque fois que l'objet utilisateur est requis par les contrôles userc ou toute autre classe, je fais un Load.

Normalement nhibernate is supposed to load the object from cache or return the persistent loaded object chaque fois Load de appelé. Mais ce n'est pas le comportement montré par mon application web. NHprof affiche toujours le SQL à chaque appel de Load. Comment puis-je vérifier le comportement correct de Load? J'utilise le framework S # architecture arp.

Répondre

2

Si vous utilisez Get, un appel à une base de données est effectué. Si vous utilisez Load, aucun hit n'est créé pour une base de données, mais l'objet (User dans votre cas) est créé avec 'loading paresseux'. Ainsi, lorsque vous vérifiez une propriété, elle sait que vous voulez des données, de sorte qu'elle frappe la base de données avec une requête pour obtenir les données.

Si vous voulez obtenir un objet du cache, vous devez considérer 2 options. Cache de premier niveau, cache utilisé en UNE seule session. Ainsi, lorsque vous fermez une session ou chargez le même objet dans une session différente, vous obtenez des hits supplémentaires. Le cache de second niveau fonctionne sur toutes les sessions. Si une session obtient l'objet, l'autre session l'obtient du cache. Donc, ce que vous voulez, c'est probablement un cache de second niveau.

6

En fait, appeler Load sur une entité non marquée comme paresseuse provoque un chargement immédiat. C'est parce que les entités non-paresseuses ne sont jamais mandatées. Dans ce cas, il agit de la même manière que Get.