title: Why is nHibernate lazy loading and ignoring the results of a future query?
body: <p>I have a method that retrieves an Entity from a database using nHibernate. It's quite a complex Entity:</p>
  
  <p><em>Level4 has many Level3s which have many Level2s which have many Level1s which has a Level1Ref</em></p>
  
  <p>So I use a few futures like this:</p>
  
  <pre><code>        var future = this.Session.QueryOver&lt;Level4&gt;()
              .Where(x =&gt; x.Id == level4Id)
              .Fetch(x =&gt; x.Level3List).Eager
              .Fetch(x =&gt; x.Level3List.First().Level2List).Eager
              .Left.JoinAlias(x =&gt; x.Level3List, () =&gt; level3Alias, x =&gt; x.AnotherThing.Id == anotherThingId)
              .FutureValue();
  </code></pre>
  
  <p>And some queries like this:</p>
  
  <pre><code>        this.Session.QueryOver&lt;Level1&gt;()
              .Fetch(x =&gt; x).Eager
              .Fetch(x =&gt; x.Level1Ref).Eager
              .Fetch(x =&gt; x.Level2).Eager
              .Inner.JoinAlias(x =&gt; x.Level2, () =&gt; level2Alias)
              .Inner.JoinAlias(() =&gt; level2Alias.Level3, () =&gt; level3Alias, x =&gt; x.AnotherThing.Id == anotherThingId &amp;&amp; level3Alias.Level4.Id == level4Id)
              .Future();
  </code></pre>
  
  <p>And then:</p>
  
  <pre><code>var record = future.Value;
  </code></pre>
  
  <p>This all generates the SQL that I would expect but when I try to iterate over the Level2.Level1List it lazy loads the records in that list.</p>
  
  <p><strong>The Question:</strong></p>
  
  <p>This is the problem. What have I? done wrong in my query that nHibernate thinks it needs to go to the database for information that it has already got? (I've got a hunch that I need to swap some of my JoinQueryOver bits for eager fetches?</p>
  
  <p>(Questions edited to simplify examples)</p>