2010-01-30 56 views
4

我尝试加载一个树时出现问题,这是我的情况,我有一个与n级关联的实体(Hierarchic);问题是,我可以使用ICriteria或HQL热切加载整棵树吗?急于在NHibernate中加载一棵树

在此先感谢您的帮助。 Ariel

回答

1

是的...只是设置正确的fetchmode。


我会在一分钟内包含示例。


例采取from here =>

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

您可以指定儿童的渴望负载孩子太=>

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

在你使用LINQ to NHibernate的情况下,使用扩展方法=>

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

而且我会推荐使用helper方法来创建从lambda表达式中传递的字符串。


很可能有可能告诉标准加载整个树。但我不知道这一点,我更喜欢指定我需要什么(似乎加载一切都很危险)。


this有帮助吗?

+4

我知道我可以使用FetchMode加载与实体相关的集合,但我想加载整个树,而不仅仅是下一个级别。 用你的方法,我会做: .SetFetchMode( “孩子”,FetchMode.JOIN)语句 .SetFetchMode( “Children.Children”,FetchMode.JOIN)语句 .SetFetchMode( “Children.Children.Children” FetchMode.Join)等 – Argons 2010-01-30 12:58:14