2008-12-22 8 views
4

Je viens juste de commencer à utiliser NHibernate et fluent-NHibernate, ce qui est génial. J'ai configuré tous mes mappings pour utiliser LazyLoading pour toutes les relations entre les classes car généralement je trouve qu'il n'est pas nécessaire de tout charger à l'avance. Cependant, parfois vous savez 100% que vous allez charger toutes les relations ou au moins une relation et cela économisera la connexion supplémentaire (s) si vous obtenez les données à l'avance.Modification du comportement initial de LazyLoad dans NHibernate

Est-il possible de dire à NHibernate de charger les données de relation pour une relation et de remplacer le paramètre initial? J'utilisais LinqToSql auparavant, pour cela je créerais des dépôts qui auraient une surcharge de ce que les éléments devraient charger dans quelles relations quand nécessaire. Cela a très bien fonctionné, donc je voudrais quelque chose de similaire pour NHibernate.

Répondre

7

J'ai trouvé que cela peut être utilisé la fonction de chargement LazyLoading/Eager des requêtes NHibernate.

Créez votre ICriteria de la manière normale, puis le nom d'association (propriété de relation, pour moi les prix) et le type chercher qui peut être joindre, sélectionnez, lazyload, désireux

.SetFetchMode("Prices", FetchMode.Join) 
0

Si vous êtes En exécutant HQL, vous pouvez utiliser "left outer join fetch" ou "left join fetch" pour rejoindre l'association que vous voulez extraire plutôt que d'être chargée paresseusement.

Si vous avez une classe de construction qui a une propriété de retourner un objet d'adresses et cette relation est paresseux chargée, vous pouvez avoir HQL semblable à:

string hql = "from Building bld where bld.Type.Id = 1"; 

Lorsque la propriété d'adresse est accessible pour chaque bâtiment une autre instruction SQL sera exécuté. Changer le HQL à ce qui suit va chercher les adresses dans le cadre de l'instruction SQL d'origine:

string hql = "from Building bld left outer join fetch bld.Address as addr where bld.Type.Id = 1"; 
Questions connexes