2017-10-12 311 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) 
      ...