2017-10-12 313 views
0

请参阅下面的代码:急切地加载集合

public Person GetById(Guid id) 
     { 
      return Session.Get<Person>(id); 
     } 

我怎样才能返回具有Person.Sports收集即时加载一个人?

我试过使用QueryOver和Fetch。

回答

0

您可以在映射中指定集合不应该被延迟加载,但是,那么将为每个要加载Person的查询检索该集合。

我相信你可以用QueryOver做到这一点,但我还没有用过。 使用的ICriteria方法时,您还可以指定抓取模式:

var crit = session.CreateCriteria<Person>(); 
crit.SetFetchMode("Sports", FetchMode.Eager); 
crit.Add(Restrictions.Eq("PersonId", id); 

因为我想知道如何使用QueryOver还有,我一直在google搜索了一下,以做到这一点,我遇到this来了。 您是否试图获取这样的实体:

var query = session.QueryOver<Person>() 
        .Fetch(p => p.Sports).Eager 
        .Left.JoinAlias(p => p.Sports,() => s) 
      ...