2011-10-07 68 views
0

我有以下代碼,我從統計表中聚合了拍賣統計信息,並返回了拍賣以及總計數(每個拍賣可能有多個統計表中的行.. )NHibernate - 在聚合時急切加載分組對象

var stats = _session.QueryOver<AuctionStatistic>() 
     .Select(
      Projections.Group<AuctionStatistic>(s => s.Auction), 
      Projections.Sum<AuctionStatistic>(s => s.BidCount), 
      Projections.Sum<AuctionStatistic>(s => s.ViewCount), 
      Projections.Sum<AuctionStatistic>(s => s.SearchCount) 
     ) 
     .OrderBy(Projections.Sum<AuctionStatistic>(s => s.ApplicationCount)).Desc 
     .Fetch(x => x.Auction).Eager 
     .Take(take) 
     .List<object[]>(); 

查詢本身似乎工作正常 - 除了返回的拍賣延遲評估,導致SELECT N + 1場景。任何人都可以提供關於如何熱切評估這個領域的建議嗎?

在此先感謝

JP

回答

0

蠻力方法是(類似於子選擇):

_session.QueryOver<Auction>().WhereRestrictionOn(a => a.Id).IsIn(stats.SelectMany(s => s).OfType<Auction>().Select(a => a.Id).ToArray()); 
+0

但這並不帶回我的統計,它只是帶來支持拍賣自己......對嗎? –

+0

它將拍賣放入一級緩存 - 避免您在訪問拍賣時出現SELECT N + 1問題。您應該在第一個之後運行該查詢。請注意,我不會將結果放入任何內容 - 實質上只是將它們放入緩存中供以後訪問。 – Goblin