title: NHibernate Eager Loading with Queryover API on a complex object graph
body: <p>I've got a pretty complex object graph that I want to load in one fell
  swoop.</p>
  
  <p>Samples have Daylogs which have Daylog Tests which have Daylog
  Results</p>
  
  <p>Daylog Tests have Testkeys, Daylog Results have Resultkeys, and
  TestKeys have Resultkeys.</p>
  
  <p>I'm using the QueryOver API and Future to run these all as one query,
  and all the data that NHibernate should need to instantiate the entire
  graph IS being returned, verfied by NHProf.</p>
  
  <pre><code>                public static IList&lt;Daylog&gt; DatablockLoad(Isession sess,
  ICollection&lt;int&gt; ids)
                  {
                          var daylogQuery = sess.QueryOver&lt;Daylog&gt;()
                                  .WhereRestrictionOn(dl =&gt; dl.DaylogID).IsIn(ids.ToArray())
                                  .Fetch(dl =&gt; dl.Tests).Eager
                                  .TransformUsing(Transformers.DistinctRootEntity)
                                  .Future&lt;Daylog&gt;();
  
                          sess.QueryOver&lt;DaylogTest&gt;()
                                  .WhereRestrictionOn(dlt =&gt;
  dlt.Daylog.DaylogID).IsIn(ids.ToArray())
                                  .Fetch(dlt =&gt; dlt.Results).Eager
                                  .Inner.JoinQueryOver&lt;TestKey&gt;(dlt =&gt; dlt.TestKey)
                                  .Fetch(dlt =&gt; dlt.TestKey).Eager
                                  .Inner.JoinQueryOver&lt;ResultKey&gt;(tk =&gt; tk.Results)
                                  .Fetch(dlt =&gt; dlt.TestKey.Results).Eager
                                  .Future&lt;DaylogTest&gt;();
  
                          sess.QueryOver&lt;DaylogResult&gt;()
                                  .Inner.JoinQueryOver(dlr =&gt; dlr.DaylogTest)
                                  .WhereRestrictionOn(dlt =&gt;
  dlt.Daylog.DaylogID).IsIn(ids.ToArray())
                                  .Fetch(dlr =&gt; dlr.ResultKey).Eager
                                  .Fetch(dlr =&gt; dlr.History).Eager
                                  .Future&lt;DaylogResult&gt;();
  
                          var daylogs = daylogQuery.ToList();
  
                          return daylogs;
                  }
  </code></pre>
  
  <p>However, I still end up with proxies to represent the relationship
  between Testkey and ResultKey, even though I'm specifically loading
  that relationship.</p>
  
  <p>I think this entire query is probably representative of a poor
  understanding of the QueryOver API, so I would like any and all advice
  on it, but primarily, I'd like to understand why I get a proxy and not
  a list of results when later I try to get
  daylogresult.resultkey.testkey.results.</p>
  
  <p>Any help? </p>