2010-01-30 4 views
4

J'ai un problème en essayant de charger un arbre, ceci est mon cas, j'ai une entité associée à elle-même (Hierarchic) ​​avec n niveaux; la question est, Puis-je charger avec impatience l'arbre entier en utilisant ICriteria ou HQL?Désireux de charger un arbre dans NHibernate

Merci d'avance pour toute aide. Ariel

Répondre

1

Oui ... il suffit de régler le fetchmode correct.


je rajouterais par exemple dans une minute.


Exemple pris from here =>

IList cats = sess.CreateCriteria(typeof(Cat)) 
    .Add(Expression.Like("Name", "Fritz%")) 
    .SetFetchMode("Mate", FetchMode.Eager) 
    .SetFetchMode("Kittens", FetchMode.Eager) 
    .List(); 

Vous pouvez spécifier à l'enfant de charge désireux de l'enfant trop =>

.SetFetchMode("Kittens.BornOn", FetchMode.Eager) 

Si vous utilisez LINQ to NHibernate, utiliser la méthode Expand =>

var feedItemQuery = from ad in session.Linq<FeedItem>().Expand("Ads") 
          where ad.Id == Id 
          select ad; 

Et je recommanderais d'utiliser la méthode helper qui crée une chaîne à partir de l'expression lambda.


Très probablement qu'il est possible de dire à Criteria de charger l'arbre entier. Mais je ne suis pas au courant à ce sujet et je préfère préciser ce dont j'ai exactement besoin (semble dangereux de tout charger).


Est-ce que this aide?

+4

Je sais que je peux charger des collections liées à une entité en utilisant FetchMode, mais je veux charger l'arbre entier, pas seulement le niveau suivant. Utilisation de votre approche que je ferais: .SetFetchMode ("Enfants", FetchMode.JOIN) .SetFetchMode ("Children.Children", FetchMode.JOIN) .SetFetchMode ("Children.Children.Children", FetchMode.Join) etc – Argons

Questions connexes