<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://nhforge.org/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/"><channel><title>Lazy loading - eager loading</title><link>http://nhforge.org/wikis/howtonh/lazy-loading-eager-loading.aspx</link><description>Quick starts, tutorials, code snippets, custom user types, application blocks and more...</description><dc:language>en-US</dc:language><generator>CommunityServer 2008.5 SP1 (Build: 31106.3070)</generator><item><title>Lazy loading - eager loading</title><link>http://nhforge.org/wikis/howtonh/lazy-loading-eager-loading.aspx</link><pubDate>Fri, 08 Jul 2011 22:54:56 GMT</pubDate><guid isPermaLink="false">45f813f2-f1c4-4eda-a619-288e3cadc793:16</guid><dc:creator>MarkCranness</dc:creator><comments>http://nhforge.org/wikis/howtonh/lazy-loading-eager-loading/comments.aspx</comments><description>Current revision posted to How to by MarkCranness on 08/07/2011 07:54:56 p.m.&lt;br /&gt;
&lt;h2&gt;Lazy loading - eager loading&lt;/h2&gt;
&lt;div style="font-size: 90%;"&gt;Filed under: &lt;span style="text-decoration: line-through; color: red;"&gt;query&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;,&lt;/span&gt; lazy loading&lt;span style="background: SpringGreen;"&gt;,&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;query&lt;/span&gt;&lt;/div&gt;

&lt;p&gt;&lt;span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;In this article I want to discuss the&amp;nbsp;&lt;a href="http://martinfowler.com/eaaCatalog/lazyLoad.html"&gt;lazy loading&lt;/a&gt;&amp;nbsp;mechanism provided by NHibernate. It is recommended for maximum flexibility to define all relations in your domain as lazy loadable. This is the default behavior of NHibernate since version 1.2. But this can lead to some undesired effects if querying your data. Let&amp;#39;s discuss these effects and how to avoid them. &lt;a href="http://www.termpaperdom.com/"&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;Term&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;Paper&lt;/span&gt;&lt;/a&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;AND&lt;/span&gt; &lt;a href="http://www.researchpaperdom.com/"&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;Research&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;Paper&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;In my previous posts I showed&amp;nbsp;&lt;a href="http://blogs.hibernatingrhinos.com/nhibernate/archive/2008/03/31/prepare-your-system-for-nhibernate.aspx"&gt;how to prepare your system for NHibernate&lt;/a&gt;&amp;nbsp;and&amp;nbsp;&lt;a href="/wikis/howtonh/your-first-nhibernate-based-application.aspx"&gt;how to implement a first NHibernate base application&lt;/a&gt;. This post is based on those two articles. &lt;a href="http://www.thesisdom.com/"&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;Thesis&lt;/span&gt;&lt;/a&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;AND&lt;/span&gt; &lt;a href="http://www.dissertationdom.com/"&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;Dissertation&lt;/span&gt;&lt;/a&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;AND&lt;/span&gt; &lt;a href="http://www.essaydom.com/"&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;Essay&lt;/span&gt;&lt;/p&gt;
&lt;h2&gt;The Domain&lt;/h2&gt;
&lt;p&gt;Let&amp;#39;s first define a simple domain. It shows part of an order entry system. I keep this model as simple as possible (a real domain model would be more complex) but it contains all aspects we want to discuss in this post. Below is the class diagram of our model&lt;/p&gt;
&lt;p&gt;&lt;img src="/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/nhibernate/LazyLoadingEagerLoadingDomain.png" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;We have an order entity which can be placed by a customer entity. Each order can have many order line entities. Each of the three entity types is uniquely identified by a property Id (surrogate key).&lt;/p&gt;
&lt;h2&gt;The Mapping Files&lt;/h2&gt;
&lt;p&gt;We have to write one mapping file per entity. It is recommended that you always have one mapping per file. Don&amp;#39;t forget to set the&amp;nbsp;&lt;b&gt;Build Action&lt;/b&gt;&amp;nbsp;of each mapping file to&amp;nbsp;&lt;b&gt;Embedded Resource&lt;/b&gt;. People often tend to forget it and the subsequent errors raised by NHibernate are not always obvious. Also do not forget to give the mapping files the correct name, that is *.&lt;b&gt;hbm&lt;/b&gt;.xml where * denotes the placeholder for the entity name.&lt;/p&gt;
&lt;p&gt;The mapping for the&amp;nbsp;&lt;b&gt;Order&lt;/b&gt;&amp;nbsp;entity might be implemented as follows&lt;/p&gt;
&lt;pre style="width:100%;"&gt;&lt;div&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;?&lt;/span&gt;&lt;span style="color:#FF00FF;"&gt;xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot; &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;?&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;hibernate-mapping &lt;/span&gt;&lt;span style="color:#FF0000;"&gt;xmlns&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;=&amp;quot;urn:nhibernate-mapping-2.2&amp;quot;&lt;/span&gt;&lt;span style="color:#FF0000;"&gt;
                   assembly&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;=&amp;quot;LazyLoadEagerLoad&amp;quot;&lt;/span&gt;&lt;span style="color:#FF0000;"&gt;
                   namespace&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;=&amp;quot;LazyLoadEagerLoad.Domain&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
  
  &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;class &lt;/span&gt;&lt;span style="color:#FF0000;"&gt;name&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;=&amp;quot;Order&amp;quot;&lt;/span&gt;&lt;span style="color:#FF0000;"&gt; table&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;=&amp;quot;Orders&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
    &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;id &lt;/span&gt;&lt;span style="color:#FF0000;"&gt;name&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;=&amp;quot;Id&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
      &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;generator &lt;/span&gt;&lt;span style="color:#FF0000;"&gt;class&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;=&amp;quot;guid&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
    &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;id&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
    &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;property &lt;/span&gt;&lt;span style="color:#FF0000;"&gt;name&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;=&amp;quot;OrderNumber&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
    &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;property &lt;/span&gt;&lt;span style="color:#FF0000;"&gt;name&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;=&amp;quot;OrderDate&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
    
    &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;many-to-one &lt;/span&gt;&lt;span style="color:#FF0000;"&gt;name&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;=&amp;quot;Customer&amp;quot;&lt;/span&gt;&lt;span style="color:#FF0000;"&gt; &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
 
    &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;set &lt;/span&gt;&lt;span style="color:#FF0000;"&gt;name&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;=&amp;quot;OrderLines&amp;quot;&lt;/span&gt;&lt;span style="color:#FF0000;"&gt; cascade&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;=&amp;quot;all-delete-orphan&amp;quot;&lt;/span&gt;&lt;span style="color:#FF0000;"&gt; &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
      &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;key &lt;/span&gt;&lt;span style="color:#FF0000;"&gt;column&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;=&amp;quot;OrderId&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
      &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;one-to-many &lt;/span&gt;&lt;span style="color:#FF0000;"&gt;class&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;=&amp;quot;OrderLine&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
    &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;set&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
    
  &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;class&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
  
&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;hibernate-mapping&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;
&lt;p&gt;Analogous you can implement the mappings for the&amp;nbsp;&lt;b&gt;Customer&lt;/b&gt;&amp;nbsp;entity&lt;/p&gt;
&lt;div class="wlWriterEditableSmartContent" id="scid:F2210F5F-69EB-4d4c-AFF7-B8A050E9CC72:3acfe276-b736-4c58-88ae-7c262976b50f" style="padding-right:0px;display:inline;padding-left:0px;float:none;padding-bottom:0px;margin:0px;padding-top:0px;"&gt;
&lt;pre style="width:100%;"&gt;&lt;div&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;?&lt;/span&gt;&lt;span style="color:#FF00FF;"&gt;xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot; &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;?&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt; 
&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;hibernate-mapping &lt;/span&gt;&lt;span style="color:#FF0000;"&gt;xmlns&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;=&amp;quot;urn:nhibernate-mapping-2.2&amp;quot;&lt;/span&gt;&lt;span style="color:#FF0000;"&gt;
                   assembly&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;=&amp;quot;LazyLoadEagerLoad&amp;quot;&lt;/span&gt;&lt;span style="color:#FF0000;"&gt;
                   namespace&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;=&amp;quot;LazyLoadEagerLoad.Domain&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
  
  &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;class &lt;/span&gt;&lt;span style="color:#FF0000;"&gt;name&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;=&amp;quot;Customer&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
    &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;id &lt;/span&gt;&lt;span style="color:#FF0000;"&gt;name&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;=&amp;quot;Id&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
      &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;generator &lt;/span&gt;&lt;span style="color:#FF0000;"&gt;class&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;=&amp;quot;guid&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
    &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;id&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
    &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;property &lt;/span&gt;&lt;span style="color:#FF0000;"&gt;name&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;=&amp;quot;CompanyName&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
  &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;class&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
 
&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;hibernate-mapping&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;and finally the mapping for the&amp;nbsp;&lt;b&gt;OrderLine&lt;/b&gt;&amp;nbsp;entity.&lt;/p&gt;
&lt;div class="wlWriterEditableSmartContent" id="scid:F2210F5F-69EB-4d4c-AFF7-B8A050E9CC72:23053d0d-5f88-44d1-8099-ff8406d62f4e" style="padding-right:0px;display:inline;padding-left:0px;float:none;padding-bottom:0px;margin:0px;padding-top:0px;"&gt;
&lt;pre style="width:100%;"&gt;&lt;div&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;?&lt;/span&gt;&lt;span style="color:#FF00FF;"&gt;xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot; &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;?&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt; 
&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;hibernate-mapping &lt;/span&gt;&lt;span style="color:#FF0000;"&gt;xmlns&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;=&amp;quot;urn:nhibernate-mapping-2.2&amp;quot;&lt;/span&gt;&lt;span style="color:#FF0000;"&gt;
                   assembly&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;=&amp;quot;LazyLoadEagerLoad&amp;quot;&lt;/span&gt;&lt;span style="color:#FF0000;"&gt;
                   namespace&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;=&amp;quot;LazyLoadEagerLoad.Domain&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
 
  &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;class &lt;/span&gt;&lt;span style="color:#FF0000;"&gt;name&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;=&amp;quot;OrderLine&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
    &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;id &lt;/span&gt;&lt;span style="color:#FF0000;"&gt;name&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;=&amp;quot;Id&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
      &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;generator &lt;/span&gt;&lt;span style="color:#FF0000;"&gt;class&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;=&amp;quot;guid&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
    &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;id&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
    &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;property &lt;/span&gt;&lt;span style="color:#FF0000;"&gt;name&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;=&amp;quot;Amount&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
    &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;property &lt;/span&gt;&lt;span style="color:#FF0000;"&gt;name&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;=&amp;quot;ProductName&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
  &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;class&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
  
&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;hibernate-mapping&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;Testing the Mapping&lt;/h2&gt;
&lt;p&gt;To test the mapping we use the following test method&lt;/p&gt;
&lt;div style="line-height:12pt;background-color:#f4f4f4;margin:20px 0px 10px;width:97.5%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;max-height:370px;font-size:8pt;overflow:auto;cursor:text;border:gray 1px solid;padding:4px;"&gt;
&lt;div style="line-height:12pt;background-color:#f4f4f4;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; LazyLoadEagerLoad.Domain;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; NHibernate.Cfg;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; NHibernate.Tool.hbm2ddl;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; NUnit.Framework;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt; &lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#0000ff;"&gt;namespace&lt;/span&gt; LazyLoadEagerLoad.Tests&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;{&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;    [TestFixture]&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;    &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;class&lt;/span&gt; GenerateSchema_Fixture&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;    {&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;        [Test]&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;        &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; Can_generate_schema()&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;        {&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;            var cfg = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; Configuration();&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;            cfg.Configure();&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;            cfg.AddAssembly(&lt;span style="color:#0000ff;"&gt;typeof&lt;/span&gt;(Order).Assembly);&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt; &lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;            &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; SchemaExport(cfg).Execute(&lt;span style="color:#0000ff;"&gt;false&lt;/span&gt;, &lt;span style="color:#0000ff;"&gt;true&lt;/span&gt;, &lt;span style="color:#0000ff;"&gt;false&lt;/span&gt;, &lt;span style="color:#0000ff;"&gt;false&lt;/span&gt;);&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;        }&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;    }&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;}&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;First we create a new instance of the NHibernate Configuration class and tell it to configure itself. Since we don&amp;#39;t provide any explicit configuration here in the code NHibernate looks out for an adequate configuration file. I have included such a file (called hibernate.cfg.xml) in my project. Please consult&amp;nbsp;&lt;a href="http://blogs.hibernatingrhinos.com/nhibernate/archive/2008/04/01/your-first-nhibernate-based-application.aspx"&gt;this&lt;/a&gt;&amp;nbsp;previous post for further details about the configuration file. &lt;/p&gt;
&lt;h2&gt;Testing the Loading Behavior of NHibernate&lt;/h2&gt;
&lt;h3&gt;Defining a base class for our tests&lt;/h3&gt;
&lt;p&gt;To avoid repetitive task (&lt;a href="http://en.wikipedia.org/wiki/Don&amp;#39;t_repeat_yourself"&gt;DRY&lt;/a&gt;&amp;nbsp;principle) we implement the following base class.&lt;/p&gt;
&lt;div style="line-height:12pt;background-color:#f4f4f4;margin:20px 0px 10px;width:97.5%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;height:866px;max-height:866px;font-size:8pt;overflow:auto;cursor:text;border:gray 1px solid;padding:4px;"&gt;
&lt;div style="line-height:12pt;background-color:#f4f4f4;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; LazyLoadEagerLoad.Domain;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; NHibernate;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; NHibernate.Cfg;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; NHibernate.Tool.hbm2ddl;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; NUnit.Framework;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt; &lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#0000ff;"&gt;namespace&lt;/span&gt; LazyLoadEagerLoad.Tests&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;{&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;    &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;class&lt;/span&gt; TestFixtureBase&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;    {&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;        &lt;span style="color:#0000ff;"&gt;private&lt;/span&gt; Configuration _configuration;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;        &lt;span style="color:#0000ff;"&gt;private&lt;/span&gt; ISessionFactory _sessionFactory;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt; &lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;        &lt;span style="color:#0000ff;"&gt;protected&lt;/span&gt; ISessionFactory SessionFactory&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;        {&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;            get { &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; _sessionFactory; }&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;        }&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt; &lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;        [TestFixtureSetUp]&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;        &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; TestFixtureSetUp()&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;        {&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;            _configuration = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; Configuration();&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;            _configuration.Configure();&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;            _configuration.AddAssembly(&lt;span style="color:#0000ff;"&gt;typeof&lt;/span&gt;(Customer).Assembly);&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;            _sessionFactory = _configuration.BuildSessionFactory();&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;        }&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt; &lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;        [TestFixtureTearDown]&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;        &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; TestFixtureTearDown()&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;        {&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;            _sessionFactory.Close();&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;        }&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt; &lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;        [SetUp]&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;        &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; SetupContext()&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;        {&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;            &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; SchemaExport(_configuration).Execute(&lt;span style="color:#0000ff;"&gt;false&lt;/span&gt;, &lt;span style="color:#0000ff;"&gt;true&lt;/span&gt;, &lt;span style="color:#0000ff;"&gt;false&lt;/span&gt;, &lt;span style="color:#0000ff;"&gt;false&lt;/span&gt;);&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;            Before_each_test();&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;        }&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt; &lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;        [TearDown]&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;        &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; TearDownContext()&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;        {&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;            After_each_test();&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;        }&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt; &lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;        &lt;span style="color:#0000ff;"&gt;protected&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;virtual&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; Before_each_test()&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;        { }&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt; &lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;        &lt;span style="color:#0000ff;"&gt;protected&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;virtual&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; After_each_test()&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;        { }&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;    }&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;}&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;When the test fixture is started, the base class configures NHibernate and creates a session factory (&lt;b&gt;TestFixtureSetUp&lt;/b&gt;). When the whole test fixture is ended the session factory is closed (&lt;b&gt;TestFixtureTearDown&lt;/b&gt;).&lt;/p&gt;
&lt;p&gt;Before each test in the fixture is run the database schema is (re-) created and the virtual&amp;nbsp;&lt;b&gt;Before_each_test&lt;/b&gt;&amp;nbsp;method is called. After each test in the fixture is finished the virtual&amp;nbsp;&lt;b&gt;After_each_test&lt;/b&gt;&amp;nbsp;method is called. The two virtual methods can (but must not necessarily) be overridden in a child class.&lt;/p&gt;
&lt;p&gt;All our test fixtures we implement will derive from this base class.&lt;/p&gt;
&lt;h3&gt;Filling the database with test data&lt;/h3&gt;
&lt;p&gt;To be able to test the loading behavior of NHibernate we need some test data in our database. We create this test data every time a test is run (just after the database schema is re-created). We add a new class&amp;nbsp;&lt;b&gt;Order_Fixture&lt;/b&gt;&amp;nbsp;to our test project and inherit from the&amp;nbsp;&lt;b&gt;TestFixtureBase&lt;/b&gt;&amp;nbsp;base class. Then we override the Before_each_test method and call a helper method which creates our initial data. We create just the absolute minimum of data we need (again --&amp;gt;DRY). That is: one customer placing one order with two order lines.&lt;/p&gt;
&lt;div style="line-height:12pt;background-color:#f4f4f4;margin:20px 0px 10px;width:97.5%;font-family:Consolas,&amp;#39;Courier New&amp;#39;,Courier,Monospace;max-height:749px;font-size:8pt;overflow:auto;cursor:text;border:gray 1px solid;padding:4px;"&gt;
&lt;div style="line-height:12pt;background-color:#f4f4f4;width:100%;font-family:Consolas,&amp;#39;Courier New&amp;#39;,Courier,Monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:Consolas,&amp;#39;Courier New&amp;#39;,Courier,Monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; System;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:Consolas,&amp;#39;Courier New&amp;#39;,Courier,Monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; LazyLoadEagerLoad.Domain;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:Consolas,&amp;#39;Courier New&amp;#39;,Courier,Monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; NHibernate;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:Consolas,&amp;#39;Courier New&amp;#39;,Courier,Monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; NHibernate.Criterion;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:Consolas,&amp;#39;Courier New&amp;#39;,Courier,Monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; NHibernate.SqlCommand;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:Consolas,&amp;#39;Courier New&amp;#39;,Courier,Monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; NUnit.Framework;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:Consolas,&amp;#39;Courier New&amp;#39;,Courier,Monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; Order=LazyLoadEagerLoad.Domain.Order;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:Consolas,&amp;#39;Courier New&amp;#39;,Courier,Monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt; &lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:Consolas,&amp;#39;Courier New&amp;#39;,Courier,Monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#0000ff;"&gt;namespace&lt;/span&gt; LazyLoadEagerLoad.Tests&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:Consolas,&amp;#39;Courier New&amp;#39;,Courier,Monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;{&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:Consolas,&amp;#39;Courier New&amp;#39;,Courier,Monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;    [TestFixture]&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:Consolas,&amp;#39;Courier New&amp;#39;,Courier,Monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;    &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;class&lt;/span&gt; Order_Fixture : TestFixtureBase&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:Consolas,&amp;#39;Courier New&amp;#39;,Courier,Monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;    {&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:Consolas,&amp;#39;Courier New&amp;#39;,Courier,Monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;        &lt;span style="color:#0000ff;"&gt;private&lt;/span&gt; Order _order;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:Consolas,&amp;#39;Courier New&amp;#39;,Courier,Monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt; &lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:Consolas,&amp;#39;Courier New&amp;#39;,Courier,Monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;        &lt;span style="color:#0000ff;"&gt;protected&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;override&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; Before_each_test()&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:Consolas,&amp;#39;Courier New&amp;#39;,Courier,Monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;        {&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:Consolas,&amp;#39;Courier New&amp;#39;,Courier,Monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;            &lt;span style="color:#0000ff;"&gt;base&lt;/span&gt;.Before_each_test();&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:Consolas,&amp;#39;Courier New&amp;#39;,Courier,Monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;            CreateInitialData();&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:Consolas,&amp;#39;Courier New&amp;#39;,Courier,Monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;        }&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:Consolas,&amp;#39;Courier New&amp;#39;,Courier,Monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt; &lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:Consolas,&amp;#39;Courier New&amp;#39;,Courier,Monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;        &lt;span style="color:#0000ff;"&gt;private&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; CreateInitialData()&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:Consolas,&amp;#39;Courier New&amp;#39;,Courier,Monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;        {&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:Consolas,&amp;#39;Courier New&amp;#39;,Courier,Monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;            &lt;span style="color:#008000;"&gt;// create a single customer and an order with two order lines for this customer&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:Consolas,&amp;#39;Courier New&amp;#39;,Courier,Monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;            var customer = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; Customer {CompanyName = &lt;span style="color:#006080;"&gt;&amp;quot;IBM&amp;quot;&lt;/span&gt;};&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:Consolas,&amp;#39;Courier New&amp;#39;,Courier,Monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;            var line1 = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; OrderLine {Amount = 5, ProductName = &lt;span style="color:#006080;"&gt;&amp;quot;Laptop XYZ&amp;quot;&lt;/span&gt;};&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:Consolas,&amp;#39;Courier New&amp;#39;,Courier,Monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;            var line2 = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; OrderLine {Amount = 2, ProductName = &lt;span style="color:#006080;"&gt;&amp;quot;Desktop PC A100&amp;quot;&lt;/span&gt;};&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:Consolas,&amp;#39;Courier New&amp;#39;,Courier,Monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;            _order = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; Order&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:Consolas,&amp;#39;Courier New&amp;#39;,Courier,Monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;                        {&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:Consolas,&amp;#39;Courier New&amp;#39;,Courier,Monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;                            OrderNumber = &lt;span style="color:#006080;"&gt;&amp;quot;o-100-001&amp;quot;&lt;/span&gt;,&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:Consolas,&amp;#39;Courier New&amp;#39;,Courier,Monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;                            OrderDate = DateTime.Today,&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:Consolas,&amp;#39;Courier New&amp;#39;,Courier,Monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;                            Customer = customer&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:Consolas,&amp;#39;Courier New&amp;#39;,Courier,Monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;                        };&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:Consolas,&amp;#39;Courier New&amp;#39;,Courier,Monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;            _order.OrderLines.Add(line1);&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:Consolas,&amp;#39;Courier New&amp;#39;,Courier,Monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;            _order.OrderLines.Add(line2);&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:Consolas,&amp;#39;Courier New&amp;#39;,Courier,Monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt; &lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:Consolas,&amp;#39;Courier New&amp;#39;,Courier,Monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;            &lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; (ISession session = SessionFactory.OpenSession())&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:Consolas,&amp;#39;Courier New&amp;#39;,Courier,Monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;                &lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; (ITransaction transaction = session.BeginTransaction())&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:Consolas,&amp;#39;Courier New&amp;#39;,Courier,Monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;                {&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:Consolas,&amp;#39;Courier New&amp;#39;,Courier,Monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;                    session.Save(customer);&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:Consolas,&amp;#39;Courier New&amp;#39;,Courier,Monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;                    session.Save(_order);&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:Consolas,&amp;#39;Courier New&amp;#39;,Courier,Monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;                    transaction.Commit();&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:Consolas,&amp;#39;Courier New&amp;#39;,Courier,Monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;                }&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:Consolas,&amp;#39;Courier New&amp;#39;,Courier,Monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;        }&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:Consolas,&amp;#39;Courier New&amp;#39;,Courier,Monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;    }&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:Consolas,&amp;#39;Courier New&amp;#39;,Courier,Monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;}&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;The&amp;nbsp;&lt;b&gt;CreateInitialData&lt;/b&gt;&amp;nbsp;method is run before each test. With this we guarantee that each test is side effects free.&lt;/p&gt;
&lt;h3&gt;Verifying the default behavior - Lazy Loading&lt;/h3&gt;
&lt;p&gt;When loading an order entity from database the default behavior of NHibernate is to lazy load all associated objects of the order entity. Let&amp;#39;s write a test to verify this. For the verification we use a utility class provided by NHibernate (NHibernateUtil) which can test whether an associated object or object collection is initialized (i.e. loaded) or not. The class can also force the initialization of an un-initialized relation.&lt;/p&gt;
&lt;div style="line-height:12pt;background-color:#f4f4f4;margin:20px 0px 10px;width:97.5%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;height:170px;max-height:200px;font-size:8pt;overflow:auto;cursor:text;border:gray 1px solid;padding:4px;"&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;[Test]
&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; Customer_and_OrderLines_are_not_loaded_when_loading_Order()
{
    Order fromDb;
    &lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; (ISession session = SessionFactory.OpenSession())
        fromDb = session.Get&amp;lt;Order&amp;gt;(_order.Id);
 
    Assert.IsFalse(NHibernateUtil.IsInitialized(fromDb.Customer));
    Assert.IsFalse(NHibernateUtil.IsInitialized(fromDb.OrderLines));
}&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;The test succeeds and NHibernate generates SQL similar to this one&lt;/p&gt;
&lt;div style="line-height:12pt;background-color:#f4f4f4;margin:20px 0px 10px;width:97.5%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;height:109px;max-height:200px;font-size:8pt;overflow:auto;cursor:text;border:gray 1px solid;padding:4px;"&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#0000ff;"&gt;SELECT&lt;/span&gt;    order0_.Id &lt;span style="color:#0000ff;"&gt;as&lt;/span&gt; Id0_0_, 
    order0_.OrderNumber &lt;span style="color:#0000ff;"&gt;as&lt;/span&gt; OrderNum2_0_0_, 
    order0_.OrderDate &lt;span style="color:#0000ff;"&gt;as&lt;/span&gt; OrderDate0_0_, 
    order0_.CustomerId &lt;span style="color:#0000ff;"&gt;as&lt;/span&gt; CustomerId0_0_ 
&lt;span style="color:#0000ff;"&gt;FROM&lt;/span&gt;    Orders order0_ 
&lt;span style="color:#0000ff;"&gt;WHERE&lt;/span&gt;    order0_.Id=&lt;span style="color:#006080;"&gt;&amp;#39;15bca5b3-2771-4bee-9923-85bda66318d8&amp;#39;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Now we have a problem: If we want to access the order line items (after the session has been closed) we get an exception. Since the session is closed NHibernate cannot lazily load the order line items for us. We can show this behavior with the following test method&lt;/p&gt;
&lt;div style="line-height:12pt;background-color:#f4f4f4;margin:20px 0px 10px;width:97.5%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;height:202px;max-height:200px;font-size:8pt;overflow:auto;cursor:text;border:gray 1px solid;padding:4px;"&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;[Test]
[ExpectedException(&lt;span style="color:#0000ff;"&gt;typeof&lt;/span&gt;(LazyInitializationException))]
&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; Accessing_customer_of_order_after_session_is_closed_throws()
{
    Order fromDb;
    &lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; (ISession session = SessionFactory.OpenSession())
        fromDb = session.Get&amp;lt;Order&amp;gt;(_order.Id);
    
    &lt;span style="color:#008000;"&gt;// trying to access the Customer of the order, will throw exception&lt;/span&gt;
    &lt;span style="color:#008000;"&gt;// Note: at this point the session is already closed&lt;/span&gt;
    &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; name = fromDb.Customer.CompanyName;
}&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;Note: the above test&amp;nbsp;&lt;b&gt;only&lt;/b&gt;&amp;nbsp;succeeds if the method throws the expected exception of type&amp;nbsp;&lt;b&gt;LazyInitializationException&lt;/b&gt;. And this is just what we want to show!&lt;/p&gt;
&lt;p&gt;Another problem is the&amp;nbsp;&lt;b&gt;n+1 select statements problem&lt;/b&gt;. If we access the order line items after loading the order we generate a select statement for each line item we access. Thus if we have n line items and want to access them all we generate one select statement for the order itself and n select statements for all line items (result: n+1 select statements). This can make our data fetching rather slow and put a (unnecessary) burden onto our database.&lt;/p&gt;
&lt;p&gt;We can simulate this behavior with this test method&lt;/p&gt;
&lt;div style="line-height:12pt;background-color:#f4f4f4;margin:20px 0px 10px;width:97.5%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;height:233px;max-height:200px;font-size:8pt;overflow:auto;cursor:text;border:gray 1px solid;padding:4px;"&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;[Test]
&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; Show_n_plus_1_select_behavior()
{
    &lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; (ISession session = SessionFactory.OpenSession())
    {
        var fromDb = session.Get&amp;lt;Order&amp;gt;(_order.Id);
        &lt;span style="color:#0000ff;"&gt;int&lt;/span&gt; sum = 0;
        &lt;span style="color:#0000ff;"&gt;foreach&lt;/span&gt; (var line &lt;span style="color:#0000ff;"&gt;in&lt;/span&gt; fromDb.OrderLines)
        {
            &lt;span style="color:#008000;"&gt;// just some dummy code to force loading of order line&lt;/span&gt;
            sum += line.Amount;
        } 
    }
}&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;NHibernate will generate SQL similar to the following&lt;/p&gt;
&lt;div style="line-height:12pt;background-color:#f4f4f4;margin:20px 0px 10px;width:97.5%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;height:235px;max-height:200px;font-size:8pt;overflow:auto;cursor:text;border:gray 1px solid;padding:4px;"&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#0000ff;"&gt;SELECT&lt;/span&gt; order0_.Id &lt;span style="color:#0000ff;"&gt;as&lt;/span&gt; Id3_0_, 
       order0_.OrderNumber &lt;span style="color:#0000ff;"&gt;as&lt;/span&gt; OrderNum2_3_0_, 
       order0_.OrderDate &lt;span style="color:#0000ff;"&gt;as&lt;/span&gt; OrderDate3_0_, 
       order0_.Customer &lt;span style="color:#0000ff;"&gt;as&lt;/span&gt; Customer3_0_ 
&lt;span style="color:#0000ff;"&gt;FROM&lt;/span&gt;   Orders order0_ 
&lt;span style="color:#0000ff;"&gt;WHERE&lt;/span&gt;  order0_.Id=&lt;span style="color:#006080;"&gt;&amp;#39;5b2dbcb7-d0bf-4c53-86aa-8cd40cb5061a&amp;#39;&lt;/span&gt;
 
&lt;span style="color:#0000ff;"&gt;SELECT&lt;/span&gt; orderlines0_.OrderId &lt;span style="color:#0000ff;"&gt;as&lt;/span&gt; OrderId1_, 
       orderlines0_.Id &lt;span style="color:#0000ff;"&gt;as&lt;/span&gt; Id1_, 
       orderlines0_.Id &lt;span style="color:#0000ff;"&gt;as&lt;/span&gt; Id4_0_, 
       orderlines0_.Amount &lt;span style="color:#0000ff;"&gt;as&lt;/span&gt; Amount4_0_, 
       orderlines0_.ProductName &lt;span style="color:#0000ff;"&gt;as&lt;/span&gt; ProductN3_4_0_ 
&lt;span style="color:#0000ff;"&gt;FROM&lt;/span&gt;   OrderLine orderlines0_ 
&lt;span style="color:#0000ff;"&gt;WHERE&lt;/span&gt;  orderlines0_.OrderId=&lt;span style="color:#006080;"&gt;&amp;#39;5b2dbcb7-d0bf-4c53-86aa-8cd40cb5061a&amp;#39;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;This time we have been lucky! NHibernate has automatically generated an optimized query for us and has loaded the 2 order line items in one go. But this is not always the case! Imagine having a collection with several 100 items and you only need to access one or two of them. It would be a waste of resources to always load all items.&lt;/p&gt;
&lt;p&gt;But fortunately we have a solution for these kind of problems with NHibernate. It&amp;#39;s called eagerly loading.&lt;/p&gt;
&lt;h3&gt;Eagerly loading with the NHibernateUtil class&lt;/h3&gt;
&lt;p&gt;If you know you need have access to related objects of the order entity you can use the&amp;nbsp;&lt;b&gt;NHibernateUtil&lt;/b&gt;&amp;nbsp;class to initialize the related objects (that is: to fetch them from the database). Have a look at this test methods&lt;/p&gt;
&lt;div style="line-height:12pt;background-color:#f4f4f4;margin:20px 0px 10px;width:97.5%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;height:444px;max-height:444px;font-size:8pt;overflow:auto;cursor:text;border:gray 1px solid;padding:4px;"&gt;
&lt;div style="line-height:12pt;background-color:#f4f4f4;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;[Test]&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; Can_initialize_customer_of_order_with_nhibernate_util()&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;{&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;    Order fromDb;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;    &lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; (ISession session = SessionFactory.OpenSession())&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;    {&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;        fromDb = session.Get&amp;lt;Order&amp;gt;(_order.Id);&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;        NHibernateUtil.Initialize(fromDb.Customer);&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;    }&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt; &lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;    Assert.IsTrue(NHibernateUtil.IsInitialized(fromDb.Customer));&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;    Assert.IsFalse(NHibernateUtil.IsInitialized(fromDb.OrderLines));&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;}&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt; &lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;[Test]&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; Can_initialize_order_lines_of_order_with_nhibernate_util()&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;{&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;    Order fromDb;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;    &lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; (ISession session = SessionFactory.OpenSession())&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;    {&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;        fromDb = session.Get&amp;lt;Order&amp;gt;(_order.Id);&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;        NHibernateUtil.Initialize(fromDb.OrderLines);&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;    }&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt; &lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;    Assert.IsFalse(NHibernateUtil.IsInitialized(fromDb.Customer));&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;    Assert.IsTrue(NHibernateUtil.IsInitialized(fromDb.OrderLines));&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;}&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;With this utility class you can initialize single objects as well as collection of objects. In each case NHibernate will send 2 select statements to the database. One to select the order and one to initialize the related object(s).&lt;/p&gt;
&lt;h3&gt;Eagerly loading with HQL&lt;/h3&gt;
&lt;p&gt;If you know that you want to load all order items of a given order then you can tell NHibernate to do so and eagerly load all order lines together with the order in one go. The following test method shows how you can formulate a HQL query which not only loads the order but also the associated customer and order lines.&lt;/p&gt;
&lt;div style="line-height:12pt;background-color:#f4f4f4;margin:20px 0px 10px;width:97.5%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;height:286px;max-height:286px;font-size:8pt;overflow:auto;cursor:text;border:gray 1px solid;padding:4px;"&gt;
&lt;div style="line-height:12pt;background-color:#f4f4f4;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;[Test]&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; Can_eagerly_load_order_aggregate_with_hql_query()&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;{&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;    Order fromDb;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;    &lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; (ISession session = SessionFactory.OpenSession())&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;    {&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;        &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; sql = &lt;span style="color:#006080;"&gt;&amp;quot;from Order o&amp;quot;&lt;/span&gt; +&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;                     &lt;span style="color:#006080;"&gt;&amp;quot; inner join fetch o.OrderLines&amp;quot;&lt;/span&gt; +&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;                     &lt;span style="color:#006080;"&gt;&amp;quot; inner join fetch o.Customer&amp;quot;&lt;/span&gt; +&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;                     &lt;span style="color:#006080;"&gt;&amp;quot; where o.Id=:id&amp;quot;&lt;/span&gt;;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;        fromDb = session.CreateQuery(sql)&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;                        .SetGuid(&lt;span style="color:#006080;"&gt;&amp;quot;id&amp;quot;&lt;/span&gt;, _order.Id)&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;                        .UniqueResult&amp;lt;Order&amp;gt;();&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;    }&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;    Assert.IsTrue(NHibernateUtil.IsInitialized(fromDb.Customer));&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;    Assert.IsTrue(NHibernateUtil.IsInitialized(fromDb.OrderLines));&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;}&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;The resulting sql generated by NHibernate is then similar to this one&lt;/p&gt;
&lt;div style="line-height:12pt;background-color:#f4f4f4;margin:20px 0px 10px;width:97.5%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;height:261px;max-height:260px;font-size:8pt;overflow:auto;cursor:text;border:gray 1px solid;padding:4px;"&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#0000ff;"&gt;select&lt;/span&gt;      order0_.Id &lt;span style="color:#0000ff;"&gt;as&lt;/span&gt; Id0_0_, 
            orderlines1_.Id &lt;span style="color:#0000ff;"&gt;as&lt;/span&gt; Id1_1_, 
            customer2_.Id &lt;span style="color:#0000ff;"&gt;as&lt;/span&gt; Id2_2_, 
            order0_.OrderNumber &lt;span style="color:#0000ff;"&gt;as&lt;/span&gt; OrderNum2_0_0_, 
            order0_.OrderDate &lt;span style="color:#0000ff;"&gt;as&lt;/span&gt; OrderDate0_0_, 
            order0_.CustomerId &lt;span style="color:#0000ff;"&gt;as&lt;/span&gt; CustomerId0_0_, 
            orderlines1_.Amount &lt;span style="color:#0000ff;"&gt;as&lt;/span&gt; Amount1_1_, 
            orderlines1_.ProductName &lt;span style="color:#0000ff;"&gt;as&lt;/span&gt; ProductN3_1_1_, 
            customer2_.CompanyName &lt;span style="color:#0000ff;"&gt;as&lt;/span&gt; CompanyN2_2_2_, 
            orderlines1_.OrderId &lt;span style="color:#0000ff;"&gt;as&lt;/span&gt; OrderId0__, 
            orderlines1_.Id &lt;span style="color:#0000ff;"&gt;as&lt;/span&gt; Id0__ 
&lt;span style="color:#0000ff;"&gt;from&lt;/span&gt;        Orders order0_ 
&lt;span style="color:#0000ff;"&gt;inner&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;join&lt;/span&gt;  OrderLine orderlines1_ &lt;span style="color:#0000ff;"&gt;on&lt;/span&gt; order0_.Id=orderlines1_.OrderId 
&lt;span style="color:#0000ff;"&gt;inner&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;join&lt;/span&gt;  Customer customer2_ &lt;span style="color:#0000ff;"&gt;on&lt;/span&gt; order0_.CustomerId=customer2_.Id 
&lt;span style="color:#0000ff;"&gt;where&lt;/span&gt;       order0_.Id=&lt;span style="color:#006080;"&gt;&amp;#39;409ebd99-3206-459b-bfed-6df989284da9&amp;#39;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;NHibernate has created an SQL select statement which joins the 3 tables involved, namely&amp;nbsp;&lt;b&gt;Orders&lt;/b&gt;,&amp;nbsp;&lt;b&gt;Customer&lt;/b&gt;&amp;nbsp;and&lt;b&gt;OrderLine&lt;/b&gt;. The returned (flat) set of records is then used by NHibernate to build up the object tree with the order entity as a root.&lt;/p&gt;
&lt;h2&gt;Aggregates in the Domain&lt;/h2&gt;
&lt;p&gt;DDD defines the concept of&amp;nbsp;&lt;a href="http://domaindrivendesign.org/discussion/messageboardarchive/Aggregates.html"&gt;aggregates&lt;/a&gt;. A short definition of an aggregate is &amp;quot;&lt;i&gt;A cluster of associated objects that are treated as a unit for the purpose of data changes.&amp;quot;.&amp;nbsp;&lt;/i&gt;An aggregate always has a&amp;nbsp;&lt;i&gt;root&lt;/i&gt;.&lt;i&gt;&amp;nbsp;&lt;/i&gt;In this context we can define the following aggregate in our domain&lt;/p&gt;
&lt;p&gt;&lt;img src="/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/nhibernate/LazyLoadingEagerLoadingAggDomain.png" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;The order entity is the&amp;nbsp;&lt;i&gt;root&lt;/i&gt;&amp;nbsp;and the order lines belong to the aggregate (can be regarded as children of the&amp;nbsp;&lt;i&gt;root&lt;/i&gt;). When creating a new order or changing an existing one we only want to modify either the order itself or its order lines. We certainly do not want to change the customer entity because this would be a completely different use case and does not belong to the&amp;nbsp;&lt;i&gt;order management&lt;/i&gt;&amp;nbsp;use case.&lt;/p&gt;
&lt;p&gt;So, when dealing with aggregates we often want to load the complete aggregate in one go! This is the perfect example for using&amp;nbsp;&lt;b&gt;eager loading&lt;/b&gt;&amp;nbsp;techniques.&lt;/p&gt;
&lt;h2&gt;Summary&lt;/h2&gt;
&lt;p&gt;I have introduced the concept of lazy loading as provided by NHibernate. I have discussed the consequences and shown how to avoid negative side effects by using different techniques of so called eager loading.&lt;/p&gt;</description></item><item><title>Lazy loading - eager loading</title><link>http://nhforge.org/wikis/howtonh/lazy-loading-eager-loading/revision/7.aspx</link><pubDate>Wed, 30 Mar 2011 11:17:43 GMT</pubDate><guid isPermaLink="false">45f813f2-f1c4-4eda-a619-288e3cadc793:490</guid><dc:creator>markweee</dc:creator><comments>http://nhforge.org/wikis/howtonh/lazy-loading-eager-loading/comments.aspx</comments><description>Revision 7 posted to How to by markweee on 30/03/2011 08:17:43 a.m.&lt;br /&gt;
&lt;h2&gt;Lazy loading - eager loading&lt;/h2&gt;
&lt;div style="font-size: 90%;"&gt;Filed under: query, lazy loading&lt;/div&gt;

&lt;p&gt;&lt;span&gt;
&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;In this article I want to discuss the&amp;nbsp;&lt;a href="http://martinfowler.com/eaaCatalog/lazyLoad.html"&gt;lazy loading&lt;/a&gt;&amp;nbsp;mechanism provided by NHibernate. It is recommended for maximum flexibility to define all relations in your domain as lazy loadable. This is the default behavior of NHibernate since version 1.2. But this can lead to some undesired effects if querying your data. Let&amp;#39;s discuss these effects and how to avoid them. &lt;a href="http://www.termpaperdom.com/"&gt;&lt;span style="background: SpringGreen;"&gt;Term&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;Paper&lt;/span&gt;&lt;/a&gt;
&lt;span style="background: SpringGreen;"&gt;AND&lt;/span&gt; &lt;a href="http://www.researchpaperdom.com/"&gt;&lt;span style="background: SpringGreen;"&gt;Research&lt;/span&gt;
&lt;span style="background: SpringGreen;"&gt;Paper&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;In my previous posts I showed&amp;nbsp;&lt;a href="http://blogs.hibernatingrhinos.com/nhibernate/archive/2008/03/31/prepare-your-system-for-nhibernate.aspx"&gt;how to prepare your system for NHibernate&lt;/a&gt;&amp;nbsp;and&amp;nbsp;&lt;a href="/wikis/howtonh/your-first-nhibernate-based-application.aspx"&gt;how to implement a first NHibernate base application&lt;/a&gt;. This post is based on those two articles. &lt;a href="http://www.thesisdom.com/"&gt;&lt;span style="background: SpringGreen;"&gt;Thesis&lt;/span&gt;&lt;/a&gt; &lt;span style="background: SpringGreen;"&gt;AND&lt;/span&gt; &lt;a href="http://www.dissertationdom.com/"&gt;&lt;span style="background: SpringGreen;"&gt;Dissertation&lt;/span&gt;&lt;/a&gt; &lt;span style="background: SpringGreen;"&gt;AND&lt;/span&gt; &lt;a href="http://www.essaydom.com/"&gt;&lt;span style="background: SpringGreen;"&gt;Essay&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;The Domain&lt;/h2&gt;
&lt;p&gt;Let&amp;#39;s first define a simple domain. It shows part of an order entry system. I keep this model as simple as possible (a real domain model would be more complex) but it contains all aspects we want to discuss in this post. Below is the class diagram of our model&lt;/p&gt;
&lt;p&gt;&lt;img src="/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/nhibernate/LazyLoadingEagerLoadingDomain.png" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;We have an order entity which can be placed by a customer entity. Each order can have many order line entities. Each of the three entity types is uniquely identified by a property Id (surrogate key).&lt;/p&gt;
&lt;h2&gt;The Mapping Files&lt;/h2&gt;
&lt;p&gt;We have to write one mapping file per entity. It is recommended that you always have one mapping per file. Don&amp;#39;t forget to set the&amp;nbsp;&lt;b&gt;Build Action&lt;/b&gt;&amp;nbsp;of each mapping file to&amp;nbsp;&lt;b&gt;Embedded Resource&lt;/b&gt;. People often tend to forget it and the subsequent errors raised by NHibernate are not always obvious. Also do not forget to give the mapping files the correct name, that is *.&lt;b&gt;hbm&lt;/b&gt;.xml where * denotes the placeholder for the entity name.&lt;/p&gt;
&lt;p&gt;The mapping for the&amp;nbsp;&lt;b&gt;Order&lt;/b&gt;&amp;nbsp;entity might be implemented as follows&lt;/p&gt;
&lt;pre style="width:100%;"&gt;&lt;div&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;?&lt;/span&gt;&lt;span style="color:#FF00FF;"&gt;xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot; &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;?&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;hibernate-mapping &lt;/span&gt;&lt;span style="color:#FF0000;"&gt;xmlns&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;=&amp;quot;urn:nhibernate-mapping-2.2&amp;quot;&lt;/span&gt;&lt;span style="color:#FF0000;"&gt;
                   assembly&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;=&amp;quot;LazyLoadEagerLoad&amp;quot;&lt;/span&gt;&lt;span style="color:#FF0000;"&gt;
                   namespace&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;=&amp;quot;LazyLoadEagerLoad.Domain&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
  
  &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;class &lt;/span&gt;&lt;span style="color:#FF0000;"&gt;name&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;=&amp;quot;Order&amp;quot;&lt;/span&gt;&lt;span style="color:#FF0000;"&gt; table&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;=&amp;quot;Orders&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
    &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;id &lt;/span&gt;&lt;span style="color:#FF0000;"&gt;name&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;=&amp;quot;Id&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
      &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;generator &lt;/span&gt;&lt;span style="color:#FF0000;"&gt;class&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;=&amp;quot;guid&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
    &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;id&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
    &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;property &lt;/span&gt;&lt;span style="color:#FF0000;"&gt;name&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;=&amp;quot;OrderNumber&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
    &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;property &lt;/span&gt;&lt;span style="color:#FF0000;"&gt;name&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;=&amp;quot;OrderDate&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
    
    &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;many-to-one &lt;/span&gt;&lt;span style="color:#FF0000;"&gt;name&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;=&amp;quot;Customer&amp;quot;&lt;/span&gt;&lt;span style="color:#FF0000;"&gt; &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
 
    &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;set &lt;/span&gt;&lt;span style="color:#FF0000;"&gt;name&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;=&amp;quot;OrderLines&amp;quot;&lt;/span&gt;&lt;span style="color:#FF0000;"&gt; cascade&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;=&amp;quot;all-delete-orphan&amp;quot;&lt;/span&gt;&lt;span style="color:#FF0000;"&gt; &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
      &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;key &lt;/span&gt;&lt;span style="color:#FF0000;"&gt;column&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;=&amp;quot;OrderId&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
      &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;one-to-many &lt;/span&gt;&lt;span style="color:#FF0000;"&gt;class&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;=&amp;quot;OrderLine&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
    &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;set&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
    
  &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;class&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
  
&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;hibernate-mapping&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;
&lt;p&gt;Analogous you can implement the mappings for the&amp;nbsp;&lt;b&gt;Customer&lt;/b&gt;&amp;nbsp;entity&lt;/p&gt;
&lt;div class="wlWriterEditableSmartContent" id="scid:F2210F5F-69EB-4d4c-AFF7-B8A050E9CC72:3acfe276-b736-4c58-88ae-7c262976b50f" style="padding-right:0px;display:inline;padding-left:0px;float:none;padding-bottom:0px;margin:0px;padding-top:0px;"&gt;
&lt;pre style="width:100%;"&gt;&lt;div&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;?&lt;/span&gt;&lt;span style="color:#FF00FF;"&gt;xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot; &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;?&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt; 
&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;hibernate-mapping &lt;/span&gt;&lt;span style="color:#FF0000;"&gt;xmlns&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;=&amp;quot;urn:nhibernate-mapping-2.2&amp;quot;&lt;/span&gt;&lt;span style="color:#FF0000;"&gt;
                   assembly&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;=&amp;quot;LazyLoadEagerLoad&amp;quot;&lt;/span&gt;&lt;span style="color:#FF0000;"&gt;
                   namespace&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;=&amp;quot;LazyLoadEagerLoad.Domain&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
  
  &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;class &lt;/span&gt;&lt;span style="color:#FF0000;"&gt;name&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;=&amp;quot;Customer&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
    &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;id &lt;/span&gt;&lt;span style="color:#FF0000;"&gt;name&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;=&amp;quot;Id&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
      &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;generator &lt;/span&gt;&lt;span style="color:#FF0000;"&gt;class&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;=&amp;quot;guid&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
    &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;id&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
    &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;property &lt;/span&gt;&lt;span style="color:#FF0000;"&gt;name&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;=&amp;quot;CompanyName&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
  &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;class&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
 
&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;hibernate-mapping&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;and finally the mapping for the&amp;nbsp;&lt;b&gt;OrderLine&lt;/b&gt;&amp;nbsp;entity.&lt;/p&gt;
&lt;div class="wlWriterEditableSmartContent" id="scid:F2210F5F-69EB-4d4c-AFF7-B8A050E9CC72:23053d0d-5f88-44d1-8099-ff8406d62f4e" style="padding-right:0px;display:inline;padding-left:0px;float:none;padding-bottom:0px;margin:0px;padding-top:0px;"&gt;
&lt;pre style="width:100%;"&gt;&lt;div&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;?&lt;/span&gt;&lt;span style="color:#FF00FF;"&gt;xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot; &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;?&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt; 
&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;hibernate-mapping &lt;/span&gt;&lt;span style="color:#FF0000;"&gt;xmlns&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;=&amp;quot;urn:nhibernate-mapping-2.2&amp;quot;&lt;/span&gt;&lt;span style="color:#FF0000;"&gt;
                   assembly&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;=&amp;quot;LazyLoadEagerLoad&amp;quot;&lt;/span&gt;&lt;span style="color:#FF0000;"&gt;
                   namespace&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;=&amp;quot;LazyLoadEagerLoad.Domain&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
 
  &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;class &lt;/span&gt;&lt;span style="color:#FF0000;"&gt;name&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;=&amp;quot;OrderLine&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
    &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;id &lt;/span&gt;&lt;span style="color:#FF0000;"&gt;name&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;=&amp;quot;Id&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
      &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;generator &lt;/span&gt;&lt;span style="color:#FF0000;"&gt;class&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;=&amp;quot;guid&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
    &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;id&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
    &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;property &lt;/span&gt;&lt;span style="color:#FF0000;"&gt;name&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;=&amp;quot;Amount&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
    &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;property &lt;/span&gt;&lt;span style="color:#FF0000;"&gt;name&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;=&amp;quot;ProductName&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
  &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;class&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
  
&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;hibernate-mapping&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;Testing the Mapping&lt;/h2&gt;
&lt;p&gt;To test the mapping we use the following test method&lt;/p&gt;
&lt;div style="font-size:8pt;margin:20px 0px 10px;overflow:auto;width:97.5%;cursor:text;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:#f4f4f4;max-height:370px;border:1px solid gray;padding:4px;"&gt;
&lt;div style="font-size:8pt;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;border-style:none;padding:0px;"&gt;&lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; LazyLoadEagerLoad.Domain;&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;&lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; NHibernate.Cfg;&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;border-style:none;padding:0px;"&gt;&lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; NHibernate.Tool.hbm2ddl;&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;&lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; NUnit.Framework;&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;border-style:none;padding:0px;"&gt; &lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;&lt;span style="color:#0000ff;"&gt;namespace&lt;/span&gt; LazyLoadEagerLoad.Tests&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;border-style:none;padding:0px;"&gt;{&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;    [TestFixture]&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;border-style:none;padding:0px;"&gt;    &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;class&lt;/span&gt; GenerateSchema_Fixture&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;    {&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;border-style:none;padding:0px;"&gt;        [Test]&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;        &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; Can_generate_schema()&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;border-style:none;padding:0px;"&gt;        {&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;            var cfg = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; Configuration();&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;border-style:none;padding:0px;"&gt;            cfg.Configure();&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;            cfg.AddAssembly(&lt;span style="color:#0000ff;"&gt;typeof&lt;/span&gt;(Order).Assembly);&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;border-style:none;padding:0px;"&gt; &lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;            &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; SchemaExport(cfg).Execute(&lt;span style="color:#0000ff;"&gt;false&lt;/span&gt;, &lt;span style="color:#0000ff;"&gt;true&lt;/span&gt;, &lt;span style="color:#0000ff;"&gt;false&lt;/span&gt;, &lt;span style="color:#0000ff;"&gt;false&lt;/span&gt;);&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;border-style:none;padding:0px;"&gt;        }&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;    }&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;border-style:none;padding:0px;"&gt;}&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;
First we create a new instance of the NHibernate Configuration class and tell it to configure itself. Since we don&amp;#39;t provide any explicit configuration here in the code NHibernate looks out for an adequate configuration file. I have included such a file (called hibernate.cfg.xml) in my project. Please consult&amp;nbsp;&lt;a href="http://blogs.hibernatingrhinos.com/nhibernate/archive/2008/04/01/your-first-nhibernate-based-application.aspx"&gt;this&lt;/a&gt;&amp;nbsp;previous post for further details about the configuration file.
&lt;/p&gt;
&lt;h2&gt;Testing the Loading Behavior of NHibernate&lt;/h2&gt;
&lt;h3&gt;Defining a base class for our tests&lt;/h3&gt;
&lt;p&gt;To avoid repetitive task (&lt;a href="http://en.wikipedia.org/wiki/Don&amp;#39;t_repeat_yourself"&gt;DRY&lt;/a&gt;&amp;nbsp;principle) we implement the following base class.&lt;/p&gt;
&lt;div style="font-size:8pt;margin:20px 0px 10px;overflow:auto;width:97.5%;cursor:text;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;height:866px;background-color:#f4f4f4;max-height:866px;border:1px solid gray;padding:4px;"&gt;
&lt;div style="font-size:8pt;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;border-style:none;padding:0px;"&gt;&lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; LazyLoadEagerLoad.Domain;&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;&lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; NHibernate;&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;border-style:none;padding:0px;"&gt;&lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; NHibernate.Cfg;&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;&lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; NHibernate.Tool.hbm2ddl;&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;border-style:none;padding:0px;"&gt;&lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; NUnit.Framework;&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt; &lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;border-style:none;padding:0px;"&gt;&lt;span style="color:#0000ff;"&gt;namespace&lt;/span&gt; LazyLoadEagerLoad.Tests&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;{&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;border-style:none;padding:0px;"&gt;    &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;class&lt;/span&gt; TestFixtureBase&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;    {&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;border-style:none;padding:0px;"&gt;        &lt;span style="color:#0000ff;"&gt;private&lt;/span&gt; Configuration _configuration;&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;        &lt;span style="color:#0000ff;"&gt;private&lt;/span&gt; ISessionFactory _sessionFactory;&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;border-style:none;padding:0px;"&gt; &lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;        &lt;span style="color:#0000ff;"&gt;protected&lt;/span&gt; ISessionFactory SessionFactory&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;border-style:none;padding:0px;"&gt;        {&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;            get { &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; _sessionFactory; }&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;border-style:none;padding:0px;"&gt;        }&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt; &lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;border-style:none;padding:0px;"&gt;        [TestFixtureSetUp]&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;        &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; TestFixtureSetUp()&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;border-style:none;padding:0px;"&gt;        {&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;            _configuration = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; Configuration();&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;border-style:none;padding:0px;"&gt;            _configuration.Configure();&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;            _configuration.AddAssembly(&lt;span style="color:#0000ff;"&gt;typeof&lt;/span&gt;(Customer).Assembly);&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;border-style:none;padding:0px;"&gt;            _sessionFactory = _configuration.BuildSessionFactory();&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;        }&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;border-style:none;padding:0px;"&gt; &lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;        [TestFixtureTearDown]&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;border-style:none;padding:0px;"&gt;        &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; TestFixtureTearDown()&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;        {&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;border-style:none;padding:0px;"&gt;            _sessionFactory.Close();&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;        }&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;border-style:none;padding:0px;"&gt; &lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;        [SetUp]&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;border-style:none;padding:0px;"&gt;        &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; SetupContext()&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;        {&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;border-style:none;padding:0px;"&gt;            &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; SchemaExport(_configuration).Execute(&lt;span style="color:#0000ff;"&gt;false&lt;/span&gt;, &lt;span style="color:#0000ff;"&gt;true&lt;/span&gt;, &lt;span style="color:#0000ff;"&gt;false&lt;/span&gt;, &lt;span style="color:#0000ff;"&gt;false&lt;/span&gt;);&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;            Before_each_test();&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;border-style:none;padding:0px;"&gt;        }&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt; &lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;border-style:none;padding:0px;"&gt;        [TearDown]&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;        &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; TearDownContext()&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;border-style:none;padding:0px;"&gt;        {&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;            After_each_test();&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;border-style:none;padding:0px;"&gt;        }&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt; &lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;border-style:none;padding:0px;"&gt;        &lt;span style="color:#0000ff;"&gt;protected&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;virtual&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; Before_each_test()&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;        { }&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;border-style:none;padding:0px;"&gt; &lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;        &lt;span style="color:#0000ff;"&gt;protected&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;virtual&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; After_each_test()&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;border-style:none;padding:0px;"&gt;        { }&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;    }&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;border-style:none;padding:0px;"&gt;}&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;When the test fixture is started, the base class configures NHibernate and creates a session factory (&lt;b&gt;TestFixtureSetUp&lt;/b&gt;). When the whole test fixture is ended the session factory is closed (&lt;b&gt;TestFixtureTearDown&lt;/b&gt;).&lt;/p&gt;
&lt;p&gt;Before each test in the fixture is run the database schema is (re-) created and the virtual&amp;nbsp;&lt;b&gt;Before_each_test&lt;/b&gt;&amp;nbsp;method is called. After each test in the fixture is finished the virtual&amp;nbsp;&lt;b&gt;After_each_test&lt;/b&gt;&amp;nbsp;method is called. The two virtual methods can (but must not necessarily) be overridden in a child class.&lt;/p&gt;
&lt;p&gt;All our test fixtures we implement will derive from this base class.&lt;/p&gt;
&lt;h3&gt;Filling the database with test data&lt;/h3&gt;
&lt;p&gt;To be able to test the loading behavior of NHibernate we need some test data in our database. We create this test data every time a test is run (just after the database schema is re-created). We add a new class&amp;nbsp;&lt;b&gt;Order_Fixture&lt;/b&gt;&amp;nbsp;to our test project and inherit from the&amp;nbsp;&lt;b&gt;TestFixtureBase&lt;/b&gt;&amp;nbsp;base class. Then we override the Before_each_test method and call a helper method which creates our initial data. We create just the absolute minimum of data we need (again --&amp;gt;DRY). That is: one customer placing one order with two order lines.&lt;/p&gt;
&lt;div style="background-color:#f4f4f4;font-family:Consolas,&amp;#39;Courier New&amp;#39;,Courier,Monospace;font-size:8pt;line-height:12pt;border:1px solid gray;cursor:text;margin:20px 0px 10px;max-height:749px;overflow:auto;padding:4px;width:97.5%;"&gt;
&lt;div style="background-color:#f4f4f4;font-family:Consolas,&amp;#39;Courier New&amp;#39;,Courier,Monospace;font-size:8pt;line-height:12pt;border-style:none;color:black;overflow:visible;padding:0px;width:100%;"&gt;
&lt;pre style="background-color:white;font-family:Consolas,&amp;#39;Courier New&amp;#39;,Courier,Monospace;font-size:8pt;line-height:12pt;border-style:none;color:black;overflow:visible;padding:0px;width:100%;margin:0em;"&gt;&lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; System;&lt;/pre&gt;
&lt;pre style="background-color:#f4f4f4;font-family:Consolas,&amp;#39;Courier New&amp;#39;,Courier,Monospace;font-size:8pt;line-height:12pt;border-style:none;color:black;overflow:visible;padding:0px;width:100%;margin:0em;"&gt;&lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; LazyLoadEagerLoad.Domain;&lt;/pre&gt;
&lt;pre style="background-color:white;font-family:Consolas,&amp;#39;Courier New&amp;#39;,Courier,Monospace;font-size:8pt;line-height:12pt;border-style:none;color:black;overflow:visible;padding:0px;width:100%;margin:0em;"&gt;&lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; NHibernate;&lt;/pre&gt;
&lt;pre style="background-color:#f4f4f4;font-family:Consolas,&amp;#39;Courier New&amp;#39;,Courier,Monospace;font-size:8pt;line-height:12pt;border-style:none;color:black;overflow:visible;padding:0px;width:100%;margin:0em;"&gt;&lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; NHibernate.Criterion;&lt;/pre&gt;
&lt;pre style="background-color:white;font-family:Consolas,&amp;#39;Courier New&amp;#39;,Courier,Monospace;font-size:8pt;line-height:12pt;border-style:none;color:black;overflow:visible;padding:0px;width:100%;margin:0em;"&gt;&lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; NHibernate.SqlCommand;&lt;/pre&gt;
&lt;pre style="background-color:#f4f4f4;font-family:Consolas,&amp;#39;Courier New&amp;#39;,Courier,Monospace;font-size:8pt;line-height:12pt;border-style:none;color:black;overflow:visible;padding:0px;width:100%;margin:0em;"&gt;&lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; NUnit.Framework;&lt;/pre&gt;
&lt;pre style="background-color:white;font-family:Consolas,&amp;#39;Courier New&amp;#39;,Courier,Monospace;font-size:8pt;line-height:12pt;border-style:none;color:black;overflow:visible;padding:0px;width:100%;margin:0em;"&gt;&lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; Order=LazyLoadEagerLoad.Domain.Order;&lt;/pre&gt;
&lt;pre style="background-color:#f4f4f4;font-family:Consolas,&amp;#39;Courier New&amp;#39;,Courier,Monospace;font-size:8pt;line-height:12pt;border-style:none;color:black;overflow:visible;padding:0px;width:100%;margin:0em;"&gt; &lt;/pre&gt;
&lt;pre style="background-color:white;font-family:Consolas,&amp;#39;Courier New&amp;#39;,Courier,Monospace;font-size:8pt;line-height:12pt;border-style:none;color:black;overflow:visible;padding:0px;width:100%;margin:0em;"&gt;&lt;span style="color:#0000ff;"&gt;namespace&lt;/span&gt; LazyLoadEagerLoad.Tests&lt;/pre&gt;
&lt;pre style="background-color:#f4f4f4;font-family:Consolas,&amp;#39;Courier New&amp;#39;,Courier,Monospace;font-size:8pt;line-height:12pt;border-style:none;color:black;overflow:visible;padding:0px;width:100%;margin:0em;"&gt;{&lt;/pre&gt;
&lt;pre style="background-color:white;font-family:Consolas,&amp;#39;Courier New&amp;#39;,Courier,Monospace;font-size:8pt;line-height:12pt;border-style:none;color:black;overflow:visible;padding:0px;width:100%;margin:0em;"&gt;    [TestFixture]&lt;/pre&gt;
&lt;pre style="background-color:#f4f4f4;font-family:Consolas,&amp;#39;Courier New&amp;#39;,Courier,Monospace;font-size:8pt;line-height:12pt;border-style:none;color:black;overflow:visible;padding:0px;width:100%;margin:0em;"&gt;    &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;class&lt;/span&gt; Order_Fixture : TestFixtureBase&lt;/pre&gt;
&lt;pre style="background-color:white;font-family:Consolas,&amp;#39;Courier New&amp;#39;,Courier,Monospace;font-size:8pt;line-height:12pt;border-style:none;color:black;overflow:visible;padding:0px;width:100%;margin:0em;"&gt;    {&lt;/pre&gt;
&lt;pre style="background-color:#f4f4f4;font-family:Consolas,&amp;#39;Courier New&amp;#39;,Courier,Monospace;font-size:8pt;line-height:12pt;border-style:none;color:black;overflow:visible;padding:0px;width:100%;margin:0em;"&gt;        &lt;span style="color:#0000ff;"&gt;private&lt;/span&gt; Order _order;&lt;/pre&gt;
&lt;pre style="background-color:white;font-family:Consolas,&amp;#39;Courier New&amp;#39;,Courier,Monospace;font-size:8pt;line-height:12pt;border-style:none;color:black;overflow:visible;padding:0px;width:100%;margin:0em;"&gt; &lt;/pre&gt;
&lt;pre style="background-color:#f4f4f4;font-family:Consolas,&amp;#39;Courier New&amp;#39;,Courier,Monospace;font-size:8pt;line-height:12pt;border-style:none;color:black;overflow:visible;padding:0px;width:100%;margin:0em;"&gt;        &lt;span style="color:#0000ff;"&gt;protected&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;override&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; Before_each_test()&lt;/pre&gt;
&lt;pre style="background-color:white;font-family:Consolas,&amp;#39;Courier New&amp;#39;,Courier,Monospace;font-size:8pt;line-height:12pt;border-style:none;color:black;overflow:visible;padding:0px;width:100%;margin:0em;"&gt;        {&lt;/pre&gt;
&lt;pre style="background-color:#f4f4f4;font-family:Consolas,&amp;#39;Courier New&amp;#39;,Courier,Monospace;font-size:8pt;line-height:12pt;border-style:none;color:black;overflow:visible;padding:0px;width:100%;margin:0em;"&gt;            &lt;span style="color:#0000ff;"&gt;base&lt;/span&gt;.Before_each_test();&lt;/pre&gt;
&lt;pre style="background-color:white;font-family:Consolas,&amp;#39;Courier New&amp;#39;,Courier,Monospace;font-size:8pt;line-height:12pt;border-style:none;color:black;overflow:visible;padding:0px;width:100%;margin:0em;"&gt;            CreateInitialData();&lt;/pre&gt;
&lt;pre style="background-color:#f4f4f4;font-family:Consolas,&amp;#39;Courier New&amp;#39;,Courier,Monospace;font-size:8pt;line-height:12pt;border-style:none;color:black;overflow:visible;padding:0px;width:100%;margin:0em;"&gt;        }&lt;/pre&gt;
&lt;pre style="background-color:white;font-family:Consolas,&amp;#39;Courier New&amp;#39;,Courier,Monospace;font-size:8pt;line-height:12pt;border-style:none;color:black;overflow:visible;padding:0px;width:100%;margin:0em;"&gt; &lt;/pre&gt;
&lt;pre style="background-color:#f4f4f4;font-family:Consolas,&amp;#39;Courier New&amp;#39;,Courier,Monospace;font-size:8pt;line-height:12pt;border-style:none;color:black;overflow:visible;padding:0px;width:100%;margin:0em;"&gt;        &lt;span style="color:#0000ff;"&gt;private&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; CreateInitialData()&lt;/pre&gt;
&lt;pre style="background-color:white;font-family:Consolas,&amp;#39;Courier New&amp;#39;,Courier,Monospace;font-size:8pt;line-height:12pt;border-style:none;color:black;overflow:visible;padding:0px;width:100%;margin:0em;"&gt;        {&lt;/pre&gt;
&lt;pre style="background-color:#f4f4f4;font-family:Consolas,&amp;#39;Courier New&amp;#39;,Courier,Monospace;font-size:8pt;line-height:12pt;border-style:none;color:black;overflow:visible;padding:0px;width:100%;margin:0em;"&gt;            &lt;span style="color:#008000;"&gt;// create a single customer and an order with two order lines for this customer&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="background-color:white;font-family:Consolas,&amp;#39;Courier New&amp;#39;,Courier,Monospace;font-size:8pt;line-height:12pt;border-style:none;color:black;overflow:visible;padding:0px;width:100%;margin:0em;"&gt;            var customer = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; Customer {CompanyName = &lt;span style="color:#006080;"&gt;&amp;quot;IBM&amp;quot;&lt;/span&gt;};&lt;/pre&gt;
&lt;pre style="background-color:#f4f4f4;font-family:Consolas,&amp;#39;Courier New&amp;#39;,Courier,Monospace;font-size:8pt;line-height:12pt;border-style:none;color:black;overflow:visible;padding:0px;width:100%;margin:0em;"&gt;            var line1 = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; OrderLine {Amount = 5, ProductName = &lt;span style="color:#006080;"&gt;&amp;quot;Laptop XYZ&amp;quot;&lt;/span&gt;};&lt;/pre&gt;
&lt;pre style="background-color:white;font-family:Consolas,&amp;#39;Courier New&amp;#39;,Courier,Monospace;font-size:8pt;line-height:12pt;border-style:none;color:black;overflow:visible;padding:0px;width:100%;margin:0em;"&gt;            var line2 = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; OrderLine {Amount = 2, ProductName = &lt;span style="color:#006080;"&gt;&amp;quot;Desktop PC A100&amp;quot;&lt;/span&gt;};&lt;/pre&gt;
&lt;pre style="background-color:#f4f4f4;font-family:Consolas,&amp;#39;Courier New&amp;#39;,Courier,Monospace;font-size:8pt;line-height:12pt;border-style:none;color:black;overflow:visible;padding:0px;width:100%;margin:0em;"&gt;            _order = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; Order&lt;/pre&gt;
&lt;pre style="background-color:white;font-family:Consolas,&amp;#39;Courier New&amp;#39;,Courier,Monospace;font-size:8pt;line-height:12pt;border-style:none;color:black;overflow:visible;padding:0px;width:100%;margin:0em;"&gt;                        {&lt;/pre&gt;
&lt;pre style="background-color:#f4f4f4;font-family:Consolas,&amp;#39;Courier New&amp;#39;,Courier,Monospace;font-size:8pt;line-height:12pt;border-style:none;color:black;overflow:visible;padding:0px;width:100%;margin:0em;"&gt;                            OrderNumber = &lt;span style="color:#006080;"&gt;&amp;quot;o-100-001&amp;quot;&lt;/span&gt;,&lt;/pre&gt;
&lt;pre style="background-color:white;font-family:Consolas,&amp;#39;Courier New&amp;#39;,Courier,Monospace;font-size:8pt;line-height:12pt;border-style:none;color:black;overflow:visible;padding:0px;width:100%;margin:0em;"&gt;                            OrderDate = DateTime.Today,&lt;/pre&gt;
&lt;pre style="background-color:#f4f4f4;font-family:Consolas,&amp;#39;Courier New&amp;#39;,Courier,Monospace;font-size:8pt;line-height:12pt;border-style:none;color:black;overflow:visible;padding:0px;width:100%;margin:0em;"&gt;                            Customer = customer&lt;/pre&gt;
&lt;pre style="background-color:white;font-family:Consolas,&amp;#39;Courier New&amp;#39;,Courier,Monospace;font-size:8pt;line-height:12pt;border-style:none;color:black;overflow:visible;padding:0px;width:100%;margin:0em;"&gt;                        };&lt;/pre&gt;
&lt;pre style="background-color:#f4f4f4;font-family:Consolas,&amp;#39;Courier New&amp;#39;,Courier,Monospace;font-size:8pt;line-height:12pt;border-style:none;color:black;overflow:visible;padding:0px;width:100%;margin:0em;"&gt;            _order.OrderLines.Add(line1);&lt;/pre&gt;
&lt;pre style="background-color:white;font-family:Consolas,&amp;#39;Courier New&amp;#39;,Courier,Monospace;font-size:8pt;line-height:12pt;border-style:none;color:black;overflow:visible;padding:0px;width:100%;margin:0em;"&gt;            _order.OrderLines.Add(line2);&lt;/pre&gt;
&lt;pre style="background-color:#f4f4f4;font-family:Consolas,&amp;#39;Courier New&amp;#39;,Courier,Monospace;font-size:8pt;line-height:12pt;border-style:none;color:black;overflow:visible;padding:0px;width:100%;margin:0em;"&gt; &lt;/pre&gt;
&lt;pre style="background-color:white;font-family:Consolas,&amp;#39;Courier New&amp;#39;,Courier,Monospace;font-size:8pt;line-height:12pt;border-style:none;color:black;overflow:visible;padding:0px;width:100%;margin:0em;"&gt;            &lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; (ISession session = SessionFactory.OpenSession())&lt;/pre&gt;
&lt;pre style="background-color:#f4f4f4;font-family:Consolas,&amp;#39;Courier New&amp;#39;,Courier,Monospace;font-size:8pt;line-height:12pt;border-style:none;color:black;overflow:visible;padding:0px;width:100%;margin:0em;"&gt;                &lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; (ITransaction transaction = session.BeginTransaction())&lt;/pre&gt;
&lt;pre style="background-color:white;font-family:Consolas,&amp;#39;Courier New&amp;#39;,Courier,Monospace;font-size:8pt;line-height:12pt;border-style:none;color:black;overflow:visible;padding:0px;width:100%;margin:0em;"&gt;                {&lt;/pre&gt;
&lt;pre style="background-color:#f4f4f4;font-family:Consolas,&amp;#39;Courier New&amp;#39;,Courier,Monospace;font-size:8pt;line-height:12pt;border-style:none;color:black;overflow:visible;padding:0px;width:100%;margin:0em;"&gt;                    session.Save(customer);&lt;/pre&gt;
&lt;pre style="background-color:white;font-family:Consolas,&amp;#39;Courier New&amp;#39;,Courier,Monospace;font-size:8pt;line-height:12pt;border-style:none;color:black;overflow:visible;padding:0px;width:100%;margin:0em;"&gt;                    session.Save(_order);&lt;/pre&gt;
&lt;pre style="background-color:#f4f4f4;font-family:Consolas,&amp;#39;Courier New&amp;#39;,Courier,Monospace;font-size:8pt;line-height:12pt;border-style:none;color:black;overflow:visible;padding:0px;width:100%;margin:0em;"&gt;                    transaction.Commit();&lt;/pre&gt;
&lt;pre style="background-color:white;font-family:Consolas,&amp;#39;Courier New&amp;#39;,Courier,Monospace;font-size:8pt;line-height:12pt;border-style:none;color:black;overflow:visible;padding:0px;width:100%;margin:0em;"&gt;                }&lt;/pre&gt;
&lt;pre style="background-color:#f4f4f4;font-family:Consolas,&amp;#39;Courier New&amp;#39;,Courier,Monospace;font-size:8pt;line-height:12pt;border-style:none;color:black;overflow:visible;padding:0px;width:100%;margin:0em;"&gt;        }&lt;/pre&gt;
&lt;pre style="background-color:white;font-family:Consolas,&amp;#39;Courier New&amp;#39;,Courier,Monospace;font-size:8pt;line-height:12pt;border-style:none;color:black;overflow:visible;padding:0px;width:100%;margin:0em;"&gt;    }&lt;/pre&gt;
&lt;pre style="background-color:#f4f4f4;font-family:Consolas,&amp;#39;Courier New&amp;#39;,Courier,Monospace;font-size:8pt;line-height:12pt;border-style:none;color:black;overflow:visible;padding:0px;width:100%;margin:0em;"&gt;}&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;The&amp;nbsp;&lt;b&gt;CreateInitialData&lt;/b&gt;&amp;nbsp;method is run before each test. With this we guarantee that each test is side effects free.&lt;/p&gt;
&lt;h3&gt;Verifying the default behavior - Lazy Loading&lt;/h3&gt;
&lt;p&gt;When loading an order entity from database the default behavior of NHibernate is to lazy load all associated objects of the order entity. Let&amp;#39;s write a test to verify this. For the verification we use a utility class provided by NHibernate (NHibernateUtil) which can test whether an associated object or object collection is initialized (i.e. loaded) or not. The class can also force the initialization of an un-initialized relation.&lt;/p&gt;
&lt;div style="font-size:8pt;margin:20px 0px 10px;overflow:auto;width:97.5%;cursor:text;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;height:170px;background-color:#f4f4f4;max-height:200px;border:1px solid gray;padding:4px;"&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;[Test]
&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; Customer_and_OrderLines_are_not_loaded_when_loading_Order()
{
    Order fromDb;
    &lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; (ISession session = SessionFactory.OpenSession())
        fromDb = session.Get&amp;lt;Order&amp;gt;(_order.Id);
 
    Assert.IsFalse(NHibernateUtil.IsInitialized(fromDb.Customer));
    Assert.IsFalse(NHibernateUtil.IsInitialized(fromDb.OrderLines));
}&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;The test succeeds and NHibernate generates SQL similar to this one&lt;/p&gt;
&lt;div style="font-size:8pt;margin:20px 0px 10px;overflow:auto;width:97.5%;cursor:text;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;height:109px;background-color:#f4f4f4;max-height:200px;border:1px solid gray;padding:4px;"&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;&lt;span style="color:#0000ff;"&gt;SELECT&lt;/span&gt;    order0_.Id &lt;span style="color:#0000ff;"&gt;as&lt;/span&gt; Id0_0_, 
    order0_.OrderNumber &lt;span style="color:#0000ff;"&gt;as&lt;/span&gt; OrderNum2_0_0_, 
    order0_.OrderDate &lt;span style="color:#0000ff;"&gt;as&lt;/span&gt; OrderDate0_0_, 
    order0_.CustomerId &lt;span style="color:#0000ff;"&gt;as&lt;/span&gt; CustomerId0_0_ 
&lt;span style="color:#0000ff;"&gt;FROM&lt;/span&gt;    Orders order0_ 
&lt;span style="color:#0000ff;"&gt;WHERE&lt;/span&gt;    order0_.Id=&lt;span style="color:#006080;"&gt;&amp;#39;15bca5b3-2771-4bee-9923-85bda66318d8&amp;#39;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Now we have a problem: If we want to access the order line items (after the session has been closed) we get an exception. Since the session is closed NHibernate cannot lazily load the order line items for us. We can show this behavior with the following test method&lt;/p&gt;
&lt;div style="font-size:8pt;margin:20px 0px 10px;overflow:auto;width:97.5%;cursor:text;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;height:202px;background-color:#f4f4f4;max-height:200px;border:1px solid gray;padding:4px;"&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;[Test]
[ExpectedException(&lt;span style="color:#0000ff;"&gt;typeof&lt;/span&gt;(LazyInitializationException))]
&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; Accessing_customer_of_order_after_session_is_closed_throws()
{
    Order fromDb;
    &lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; (ISession session = SessionFactory.OpenSession())
        fromDb = session.Get&amp;lt;Order&amp;gt;(_order.Id);
    
    &lt;span style="color:#008000;"&gt;// trying to access the Customer of the order, will throw exception&lt;/span&gt;
    &lt;span style="color:#008000;"&gt;// Note: at this point the session is already closed&lt;/span&gt;
    &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; name = fromDb.Customer.CompanyName;
}&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;Note: the above test&amp;nbsp;&lt;b&gt;only&lt;/b&gt;&amp;nbsp;succeeds if the method throws the expected exception of type&amp;nbsp;&lt;b&gt;LazyInitializationException&lt;/b&gt;. And this is just what we want to show!&lt;/p&gt;
&lt;p&gt;Another problem is the&amp;nbsp;&lt;b&gt;n+1 select statements problem&lt;/b&gt;. If we access the order line items after loading the order we generate a select statement for each line item we access. Thus if we have n line items and want to access them all we generate one select statement for the order itself and n select statements for all line items (result: n+1 select statements). This can make our data fetching rather slow and put a (unnecessary) burden onto our database.&lt;/p&gt;
&lt;p&gt;We can simulate this behavior with this test method&lt;/p&gt;
&lt;div style="font-size:8pt;margin:20px 0px 10px;overflow:auto;width:97.5%;cursor:text;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;height:233px;background-color:#f4f4f4;max-height:200px;border:1px solid gray;padding:4px;"&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;[Test]
&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; Show_n_plus_1_select_behavior()
{
    &lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; (ISession session = SessionFactory.OpenSession())
    {
        var fromDb = session.Get&amp;lt;Order&amp;gt;(_order.Id);
        &lt;span style="color:#0000ff;"&gt;int&lt;/span&gt; sum = 0;
        &lt;span style="color:#0000ff;"&gt;foreach&lt;/span&gt; (var line &lt;span style="color:#0000ff;"&gt;in&lt;/span&gt; fromDb.OrderLines)
        {
            &lt;span style="color:#008000;"&gt;// just some dummy code to force loading of order line&lt;/span&gt;
            sum += line.Amount;
        } 
    }
}&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;NHibernate will generate SQL similar to the following&lt;/p&gt;
&lt;div style="font-size:8pt;margin:20px 0px 10px;overflow:auto;width:97.5%;cursor:text;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;height:235px;background-color:#f4f4f4;max-height:200px;border:1px solid gray;padding:4px;"&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;&lt;span style="color:#0000ff;"&gt;SELECT&lt;/span&gt; order0_.Id &lt;span style="color:#0000ff;"&gt;as&lt;/span&gt; Id3_0_, 
       order0_.OrderNumber &lt;span style="color:#0000ff;"&gt;as&lt;/span&gt; OrderNum2_3_0_, 
       order0_.OrderDate &lt;span style="color:#0000ff;"&gt;as&lt;/span&gt; OrderDate3_0_, 
       order0_.Customer &lt;span style="color:#0000ff;"&gt;as&lt;/span&gt; Customer3_0_ 
&lt;span style="color:#0000ff;"&gt;FROM&lt;/span&gt;   Orders order0_ 
&lt;span style="color:#0000ff;"&gt;WHERE&lt;/span&gt;  order0_.Id=&lt;span style="color:#006080;"&gt;&amp;#39;5b2dbcb7-d0bf-4c53-86aa-8cd40cb5061a&amp;#39;&lt;/span&gt;
 
&lt;span style="color:#0000ff;"&gt;SELECT&lt;/span&gt; orderlines0_.OrderId &lt;span style="color:#0000ff;"&gt;as&lt;/span&gt; OrderId1_, 
       orderlines0_.Id &lt;span style="color:#0000ff;"&gt;as&lt;/span&gt; Id1_, 
       orderlines0_.Id &lt;span style="color:#0000ff;"&gt;as&lt;/span&gt; Id4_0_, 
       orderlines0_.Amount &lt;span style="color:#0000ff;"&gt;as&lt;/span&gt; Amount4_0_, 
       orderlines0_.ProductName &lt;span style="color:#0000ff;"&gt;as&lt;/span&gt; ProductN3_4_0_ 
&lt;span style="color:#0000ff;"&gt;FROM&lt;/span&gt;   OrderLine orderlines0_ 
&lt;span style="color:#0000ff;"&gt;WHERE&lt;/span&gt;  orderlines0_.OrderId=&lt;span style="color:#006080;"&gt;&amp;#39;5b2dbcb7-d0bf-4c53-86aa-8cd40cb5061a&amp;#39;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;This time we have been lucky! NHibernate has automatically generated an optimized query for us and has loaded the 2 order line items in one go. But this is not always the case! Imagine having a collection with several 100 items and you only need to access one or two of them. It would be a waste of resources to always load all items.&lt;/p&gt;
&lt;p&gt;But fortunately we have a solution for these kind of problems with NHibernate. It&amp;#39;s called eagerly loading.&lt;/p&gt;
&lt;h3&gt;Eagerly loading with the NHibernateUtil class&lt;/h3&gt;
&lt;p&gt;If you know you need have access to related objects of the order entity you can use the&amp;nbsp;&lt;b&gt;NHibernateUtil&lt;/b&gt;&amp;nbsp;class to initialize the related objects (that is: to fetch them from the database). Have a look at this test methods&lt;/p&gt;
&lt;div style="font-size:8pt;margin:20px 0px 10px;overflow:auto;width:97.5%;cursor:text;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;height:444px;background-color:#f4f4f4;max-height:444px;border:1px solid gray;padding:4px;"&gt;
&lt;div style="font-size:8pt;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;border-style:none;padding:0px;"&gt;[Test]&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; Can_initialize_customer_of_order_with_nhibernate_util()&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;border-style:none;padding:0px;"&gt;{&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;    Order fromDb;&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;border-style:none;padding:0px;"&gt;    &lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; (ISession session = SessionFactory.OpenSession())&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;    {&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;border-style:none;padding:0px;"&gt;        fromDb = session.Get&amp;lt;Order&amp;gt;(_order.Id);&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;        NHibernateUtil.Initialize(fromDb.Customer);&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;border-style:none;padding:0px;"&gt;    }&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt; &lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;border-style:none;padding:0px;"&gt;    Assert.IsTrue(NHibernateUtil.IsInitialized(fromDb.Customer));&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;    Assert.IsFalse(NHibernateUtil.IsInitialized(fromDb.OrderLines));&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;border-style:none;padding:0px;"&gt;}&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt; &lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;border-style:none;padding:0px;"&gt;[Test]&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; Can_initialize_order_lines_of_order_with_nhibernate_util()&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;border-style:none;padding:0px;"&gt;{&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;    Order fromDb;&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;border-style:none;padding:0px;"&gt;    &lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; (ISession session = SessionFactory.OpenSession())&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;    {&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;border-style:none;padding:0px;"&gt;        fromDb = session.Get&amp;lt;Order&amp;gt;(_order.Id);&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;        NHibernateUtil.Initialize(fromDb.OrderLines);&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;border-style:none;padding:0px;"&gt;    }&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt; &lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;border-style:none;padding:0px;"&gt;    Assert.IsFalse(NHibernateUtil.IsInitialized(fromDb.Customer));&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;    Assert.IsTrue(NHibernateUtil.IsInitialized(fromDb.OrderLines));&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;border-style:none;padding:0px;"&gt;}&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;With this utility class you can initialize single objects as well as collection of objects. In each case NHibernate will send 2 select statements to the database. One to select the order and one to initialize the related object(s).&lt;/p&gt;
&lt;h3&gt;Eagerly loading with HQL&lt;/h3&gt;
&lt;p&gt;If you know that you want to load all order items of a given order then you can tell NHibernate to do so and eagerly load all order lines together with the order in one go. The following test method shows how you can formulate a HQL query which not only loads the order but also the associated customer and order lines.&lt;/p&gt;
&lt;div style="font-size:8pt;margin:20px 0px 10px;overflow:auto;width:97.5%;cursor:text;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;height:286px;background-color:#f4f4f4;max-height:286px;border:1px solid gray;padding:4px;"&gt;
&lt;div style="font-size:8pt;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;border-style:none;padding:0px;"&gt;[Test]&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; Can_eagerly_load_order_aggregate_with_hql_query()&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;border-style:none;padding:0px;"&gt;{&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;    Order fromDb;&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;border-style:none;padding:0px;"&gt;    &lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; (ISession session = SessionFactory.OpenSession())&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;    {&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;border-style:none;padding:0px;"&gt;        &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; sql = &lt;span style="color:#006080;"&gt;&amp;quot;from Order o&amp;quot;&lt;/span&gt; +&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;                     &lt;span style="color:#006080;"&gt;&amp;quot; inner join fetch o.OrderLines&amp;quot;&lt;/span&gt; +&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;border-style:none;padding:0px;"&gt;                     &lt;span style="color:#006080;"&gt;&amp;quot; inner join fetch o.Customer&amp;quot;&lt;/span&gt; +&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;                     &lt;span style="color:#006080;"&gt;&amp;quot; where o.Id=:id&amp;quot;&lt;/span&gt;;&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;border-style:none;padding:0px;"&gt;        fromDb = session.CreateQuery(sql)&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;                        .SetGuid(&lt;span style="color:#006080;"&gt;&amp;quot;id&amp;quot;&lt;/span&gt;, _order.Id)&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;border-style:none;padding:0px;"&gt;                        .UniqueResult&amp;lt;Order&amp;gt;();&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;    }&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;border-style:none;padding:0px;"&gt;    Assert.IsTrue(NHibernateUtil.IsInitialized(fromDb.Customer));&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;    Assert.IsTrue(NHibernateUtil.IsInitialized(fromDb.OrderLines));&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;border-style:none;padding:0px;"&gt;}&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;The resulting sql generated by NHibernate is then similar to this one&lt;/p&gt;
&lt;div style="font-size:8pt;margin:20px 0px 10px;overflow:auto;width:97.5%;cursor:text;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;height:261px;background-color:#f4f4f4;max-height:260px;border:1px solid gray;padding:4px;"&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;&lt;span style="color:#0000ff;"&gt;select&lt;/span&gt;      order0_.Id &lt;span style="color:#0000ff;"&gt;as&lt;/span&gt; Id0_0_, 
            orderlines1_.Id &lt;span style="color:#0000ff;"&gt;as&lt;/span&gt; Id1_1_, 
            customer2_.Id &lt;span style="color:#0000ff;"&gt;as&lt;/span&gt; Id2_2_, 
            order0_.OrderNumber &lt;span style="color:#0000ff;"&gt;as&lt;/span&gt; OrderNum2_0_0_, 
            order0_.OrderDate &lt;span style="color:#0000ff;"&gt;as&lt;/span&gt; OrderDate0_0_, 
            order0_.CustomerId &lt;span style="color:#0000ff;"&gt;as&lt;/span&gt; CustomerId0_0_, 
            orderlines1_.Amount &lt;span style="color:#0000ff;"&gt;as&lt;/span&gt; Amount1_1_, 
            orderlines1_.ProductName &lt;span style="color:#0000ff;"&gt;as&lt;/span&gt; ProductN3_1_1_, 
            customer2_.CompanyName &lt;span style="color:#0000ff;"&gt;as&lt;/span&gt; CompanyN2_2_2_, 
            orderlines1_.OrderId &lt;span style="color:#0000ff;"&gt;as&lt;/span&gt; OrderId0__, 
            orderlines1_.Id &lt;span style="color:#0000ff;"&gt;as&lt;/span&gt; Id0__ 
&lt;span style="color:#0000ff;"&gt;from&lt;/span&gt;        Orders order0_ 
&lt;span style="color:#0000ff;"&gt;inner&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;join&lt;/span&gt;  OrderLine orderlines1_ &lt;span style="color:#0000ff;"&gt;on&lt;/span&gt; order0_.Id=orderlines1_.OrderId 
&lt;span style="color:#0000ff;"&gt;inner&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;join&lt;/span&gt;  Customer customer2_ &lt;span style="color:#0000ff;"&gt;on&lt;/span&gt; order0_.CustomerId=customer2_.Id 
&lt;span style="color:#0000ff;"&gt;where&lt;/span&gt;       order0_.Id=&lt;span style="color:#006080;"&gt;&amp;#39;409ebd99-3206-459b-bfed-6df989284da9&amp;#39;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;NHibernate has created an SQL select statement which joins the 3 tables involved, namely&amp;nbsp;&lt;b&gt;Orders&lt;/b&gt;,&amp;nbsp;&lt;b&gt;Customer&lt;/b&gt;&amp;nbsp;and&lt;b&gt;OrderLine&lt;/b&gt;. The returned (flat) set of records is then used by NHibernate to build up the object tree with the order entity as a root.&lt;/p&gt;
&lt;h2&gt;Aggregates in the Domain&lt;/h2&gt;
&lt;p&gt;DDD defines the concept of&amp;nbsp;&lt;a href="http://domaindrivendesign.org/discussion/messageboardarchive/Aggregates.html"&gt;aggregates&lt;/a&gt;. A short definition of an aggregate is &amp;quot;&lt;i&gt;A cluster of associated objects that are treated as a unit for the purpose of data changes.&amp;quot;.&amp;nbsp;&lt;/i&gt;An aggregate always has a&amp;nbsp;&lt;i&gt;root&lt;/i&gt;.&lt;i&gt;&amp;nbsp;&lt;/i&gt;In this context we can define the following aggregate in our domain&lt;/p&gt;
&lt;p&gt;&lt;img src="/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/nhibernate/LazyLoadingEagerLoadingAggDomain.png" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;The order entity is the&amp;nbsp;&lt;i&gt;root&lt;/i&gt;&amp;nbsp;and the order lines belong to the aggregate (can be regarded as children of the&amp;nbsp;&lt;i&gt;root&lt;/i&gt;). When creating a new order or changing an existing one we only want to modify either the order itself or its order lines. We certainly do not want to change the customer entity because this would be a completely different use case and does not belong to the&amp;nbsp;&lt;i&gt;order management&lt;/i&gt;&amp;nbsp;use case.&lt;/p&gt;
&lt;p&gt;So, when dealing with aggregates we often want to load the complete aggregate in one go! This is the perfect example for using&amp;nbsp;&lt;b&gt;eager loading&lt;/b&gt;&amp;nbsp;techniques.&lt;/p&gt;
&lt;h2&gt;Summary&lt;/h2&gt;
&lt;p&gt;I have introduced the concept of lazy loading as provided by NHibernate. I have discussed the consequences and shown how to avoid negative side effects by using different techniques of so called eager loading.&lt;/p&gt;</description></item><item><title>Lazy loading - eager loading</title><link>http://nhforge.org/wikis/howtonh/lazy-loading-eager-loading/revision/6.aspx</link><pubDate>Wed, 10 Sep 2008 14:32:59 GMT</pubDate><guid isPermaLink="false">45f813f2-f1c4-4eda-a619-288e3cadc793:372</guid><dc:creator>Fabio Maulo</dc:creator><comments>http://nhforge.org/wikis/howtonh/lazy-loading-eager-loading/comments.aspx</comments><description>Revision 6 posted to How to by Fabio Maulo on 10/09/2008 11:32:59 a.m.&lt;br /&gt;
&lt;h2&gt;Lazy loading - eager loading&lt;/h2&gt;
&lt;div style="font-size: 90%;"&gt;Filed under: &lt;span style="background: SpringGreen;"&gt;query&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;,&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;lazy&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;loading&lt;/span&gt;&lt;/div&gt;

&lt;p&gt;&lt;span&gt;
&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;In this article I want to discuss the&amp;nbsp;&lt;a href="http://martinfowler.com/eaaCatalog/lazyLoad.html"&gt;lazy loading&lt;/a&gt;&amp;nbsp;mechanism provided by NHibernate. It is recommended for maximum flexibility to define all relations in your domain as lazy loadable. This is the default behavior of NHibernate since version 1.2. But this can lead to some undesired effects if querying your data. Let&amp;#39;s discuss these effects and how to avoid them.&lt;/p&gt;
&lt;p&gt;In my previous posts I showed&amp;nbsp;&lt;a href="http://blogs.hibernatingrhinos.com/nhibernate/archive/2008/03/31/prepare-your-system-for-nhibernate.aspx"&gt;how to prepare your system for NHibernate&lt;/a&gt;&amp;nbsp;and&amp;nbsp;&lt;a href="/wikis/howtonh/your-first-nhibernate-based-application.aspx"&gt;how to implement a first NHibernate base application&lt;/a&gt;. This post is based on those two articles.&lt;/p&gt;
&lt;h2&gt;The Domain&lt;/h2&gt;
&lt;p&gt;Let&amp;#39;s first define a simple domain. It shows part of an order entry system. I keep this model as simple as possible (a real domain model would be more complex) but it contains all aspects we want to discuss in this post. Below is the class diagram of our model&lt;/p&gt;
&lt;p&gt;&lt;a href="/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/nhibernate/image_5F00_4.png"&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;&lt;img border="0" width="480" src="/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/nhibernate/image_5F00_thumb_5F00_1.png" alt="image" height="389" /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="background: SpringGreen;"&gt;&lt;img src="/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/nhibernate/LazyLoadingEagerLoadingDomain.png" alt="" /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;We have an order entity which can be placed by a customer entity. Each order can have many order line entities. Each of the three entity types is uniquely identified by a property Id (surrogate key).&lt;/p&gt;
&lt;h2&gt;The Mapping Files&lt;/h2&gt;
&lt;p&gt;We have to write one mapping file per entity. It is recommended that you always have one mapping per file. Don&amp;#39;t forget to set the&amp;nbsp;&lt;strong&gt;Build Action&lt;/strong&gt;&amp;nbsp;of each mapping file to&amp;nbsp;&lt;strong&gt;Embedded Resource&lt;/strong&gt;. People often tend to forget it and the subsequent errors raised by NHibernate are not always obvious. Also do not forget to give the mapping files the correct name, that is *.&lt;strong&gt;hbm&lt;/strong&gt;.xml where * denotes the placeholder for the entity name.&lt;/p&gt;
&lt;p&gt;The mapping for the&amp;nbsp;&lt;strong&gt;Order&lt;/strong&gt;&amp;nbsp;entity might be implemented as follows&lt;/p&gt;
&lt;pre style="width:100%;"&gt;&lt;div&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;?&lt;/span&gt;&lt;span style="color:#FF00FF;"&gt;xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot; &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;?&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;hibernate-mapping &lt;/span&gt;&lt;span style="color:#FF0000;"&gt;xmlns&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;=&amp;quot;urn:nhibernate-mapping-2.2&amp;quot;&lt;/span&gt;&lt;span style="color:#FF0000;"&gt;
                   assembly&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;=&amp;quot;LazyLoadEagerLoad&amp;quot;&lt;/span&gt;&lt;span style="color:#FF0000;"&gt;
                   namespace&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;=&amp;quot;LazyLoadEagerLoad.Domain&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
  
  &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;class &lt;/span&gt;&lt;span style="color:#FF0000;"&gt;name&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;=&amp;quot;Order&amp;quot;&lt;/span&gt;&lt;span style="color:#FF0000;"&gt; table&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;=&amp;quot;Orders&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
    &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;id &lt;/span&gt;&lt;span style="color:#FF0000;"&gt;name&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;=&amp;quot;Id&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
      &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;generator &lt;/span&gt;&lt;span style="color:#FF0000;"&gt;class&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;=&amp;quot;guid&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
    &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;id&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
    &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;property &lt;/span&gt;&lt;span style="color:#FF0000;"&gt;name&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;=&amp;quot;OrderNumber&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
    &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;property &lt;/span&gt;&lt;span style="color:#FF0000;"&gt;name&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;=&amp;quot;OrderDate&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
    
    &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;many-to-one &lt;/span&gt;&lt;span style="color:#FF0000;"&gt;name&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;=&amp;quot;Customer&amp;quot;&lt;/span&gt;&lt;span style="color:#FF0000;"&gt; &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
 
    &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;set &lt;/span&gt;&lt;span style="color:#FF0000;"&gt;name&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;=&amp;quot;OrderLines&amp;quot;&lt;/span&gt;&lt;span style="color:#FF0000;"&gt; cascade&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;=&amp;quot;all-delete-orphan&amp;quot;&lt;/span&gt;&lt;span style="color:#FF0000;"&gt; &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
      &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;key &lt;/span&gt;&lt;span style="color:#FF0000;"&gt;column&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;=&amp;quot;OrderId&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
      &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;one-to-many &lt;/span&gt;&lt;span style="color:#FF0000;"&gt;class&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;=&amp;quot;OrderLine&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
    &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;set&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
    
  &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;class&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
  
&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;hibernate-mapping&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;
&lt;p&gt;Analogous you can implement the mappings for the&amp;nbsp;&lt;strong&gt;Customer&lt;/strong&gt;&amp;nbsp;entity&lt;/p&gt;
&lt;div class="wlWriterEditableSmartContent" id="scid:F2210F5F-69EB-4d4c-AFF7-B8A050E9CC72:3acfe276-b736-4c58-88ae-7c262976b50f" style="padding-right:0px;display:inline;padding-left:0px;float:none;padding-bottom:0px;margin:0px;padding-top:0px;"&gt;
&lt;pre style="width:100%;"&gt;&lt;div&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;?&lt;/span&gt;&lt;span style="color:#FF00FF;"&gt;xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot; &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;?&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt; 
&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;hibernate-mapping &lt;/span&gt;&lt;span style="color:#FF0000;"&gt;xmlns&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;=&amp;quot;urn:nhibernate-mapping-2.2&amp;quot;&lt;/span&gt;&lt;span style="color:#FF0000;"&gt;
                   assembly&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;=&amp;quot;LazyLoadEagerLoad&amp;quot;&lt;/span&gt;&lt;span style="color:#FF0000;"&gt;
                   namespace&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;=&amp;quot;LazyLoadEagerLoad.Domain&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
  
  &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;class &lt;/span&gt;&lt;span style="color:#FF0000;"&gt;name&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;=&amp;quot;Customer&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
    &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;id &lt;/span&gt;&lt;span style="color:#FF0000;"&gt;name&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;=&amp;quot;Id&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
      &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;generator &lt;/span&gt;&lt;span style="color:#FF0000;"&gt;class&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;=&amp;quot;guid&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
    &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;id&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
    &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;property &lt;/span&gt;&lt;span style="color:#FF0000;"&gt;name&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;=&amp;quot;CompanyName&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
  &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;class&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
 
&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;hibernate-mapping&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;and finally the mapping for the&amp;nbsp;&lt;strong&gt;OrderLine&lt;/strong&gt;&amp;nbsp;entity.&lt;/p&gt;
&lt;div class="wlWriterEditableSmartContent" id="scid:F2210F5F-69EB-4d4c-AFF7-B8A050E9CC72:23053d0d-5f88-44d1-8099-ff8406d62f4e" style="padding-right:0px;display:inline;padding-left:0px;float:none;padding-bottom:0px;margin:0px;padding-top:0px;"&gt;
&lt;pre style="width:100%;"&gt;&lt;div&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;?&lt;/span&gt;&lt;span style="color:#FF00FF;"&gt;xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot; &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;?&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt; 
&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;hibernate-mapping &lt;/span&gt;&lt;span style="color:#FF0000;"&gt;xmlns&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;=&amp;quot;urn:nhibernate-mapping-2.2&amp;quot;&lt;/span&gt;&lt;span style="color:#FF0000;"&gt;
                   assembly&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;=&amp;quot;LazyLoadEagerLoad&amp;quot;&lt;/span&gt;&lt;span style="color:#FF0000;"&gt;
                   namespace&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;=&amp;quot;LazyLoadEagerLoad.Domain&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
 
  &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;class &lt;/span&gt;&lt;span style="color:#FF0000;"&gt;name&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;=&amp;quot;OrderLine&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
    &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;id &lt;/span&gt;&lt;span style="color:#FF0000;"&gt;name&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;=&amp;quot;Id&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
      &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;generator &lt;/span&gt;&lt;span style="color:#FF0000;"&gt;class&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;=&amp;quot;guid&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
    &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;id&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
    &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;property &lt;/span&gt;&lt;span style="color:#FF0000;"&gt;name&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;=&amp;quot;Amount&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
    &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;property &lt;/span&gt;&lt;span style="color:#FF0000;"&gt;name&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;=&amp;quot;ProductName&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
  &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;class&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
  
&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;hibernate-mapping&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;Testing the Mapping&lt;/h2&gt;
&lt;p&gt;To test the mapping we use the following test method&lt;/p&gt;
&lt;div style="font-size:8pt;margin:20px 0px 10px;overflow:auto;width:97.5%;cursor:text;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;max-height:370px;border:gray 1px solid;padding:4px;"&gt;
&lt;div style="font-size:8pt;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;border-style:none;padding:0px;"&gt;&lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; LazyLoadEagerLoad.Domain;&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;&lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; NHibernate.Cfg;&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;border-style:none;padding:0px;"&gt;&lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; NHibernate.Tool.hbm2ddl;&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;&lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; NUnit.Framework;&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;border-style:none;padding:0px;"&gt; &lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;&lt;span style="color:#0000ff;"&gt;namespace&lt;/span&gt; LazyLoadEagerLoad.Tests&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;border-style:none;padding:0px;"&gt;{&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;    [TestFixture]&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;border-style:none;padding:0px;"&gt;    &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;class&lt;/span&gt; GenerateSchema_Fixture&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;    {&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;border-style:none;padding:0px;"&gt;        [Test]&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;        &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; Can_generate_schema()&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;border-style:none;padding:0px;"&gt;        {&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;            var cfg = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; Configuration();&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;border-style:none;padding:0px;"&gt;            cfg.Configure();&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;            cfg.AddAssembly(&lt;span style="color:#0000ff;"&gt;typeof&lt;/span&gt;(Order).Assembly);&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;border-style:none;padding:0px;"&gt; &lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;            &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; SchemaExport(cfg).Execute(&lt;span style="color:#0000ff;"&gt;false&lt;/span&gt;, &lt;span style="color:#0000ff;"&gt;true&lt;/span&gt;, &lt;span style="color:#0000ff;"&gt;false&lt;/span&gt;, &lt;span style="color:#0000ff;"&gt;false&lt;/span&gt;);&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;border-style:none;padding:0px;"&gt;        }&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;    }&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;border-style:none;padding:0px;"&gt;}&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;
First we create a new instance of the NHibernate Configuration class and tell it to configure itself. Since we don&amp;#39;t provide any explicit configuration here in the code NHibernate looks out for an adequate configuration file. I have included such a file (called hibernate.cfg.xml) in my project. Please consult&amp;nbsp;&lt;a href="http://blogs.hibernatingrhinos.com/nhibernate/archive/2008/04/01/your-first-nhibernate-based-application.aspx"&gt;this&lt;/a&gt;&amp;nbsp;previous post for further details about the configuration file.
&lt;/p&gt;
&lt;h2&gt;Testing the Loading Behavior of NHibernate&lt;/h2&gt;
&lt;h3&gt;Defining a base class for our tests&lt;/h3&gt;
&lt;p&gt;To avoid repetitive task (&lt;a href="http://en.wikipedia.org/wiki/Don&amp;#39;t_repeat_yourself"&gt;DRY&lt;/a&gt;&amp;nbsp;principle) we implement the following base class.&lt;/p&gt;
&lt;div style="font-size:8pt;margin:20px 0px 10px;overflow:auto;width:97.5%;cursor:text;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;height:866px;background-color:#f4f4f4;max-height:866px;border:gray 1px solid;padding:4px;"&gt;
&lt;div style="font-size:8pt;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;border-style:none;padding:0px;"&gt;&lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; LazyLoadEagerLoad.Domain;&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;&lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; NHibernate;&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;border-style:none;padding:0px;"&gt;&lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; NHibernate.Cfg;&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;&lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; NHibernate.Tool.hbm2ddl;&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;border-style:none;padding:0px;"&gt;&lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; NUnit.Framework;&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt; &lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;border-style:none;padding:0px;"&gt;&lt;span style="color:#0000ff;"&gt;namespace&lt;/span&gt; LazyLoadEagerLoad.Tests&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;{&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;border-style:none;padding:0px;"&gt;    &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;class&lt;/span&gt; TestFixtureBase&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;    {&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;border-style:none;padding:0px;"&gt;        &lt;span style="color:#0000ff;"&gt;private&lt;/span&gt; Configuration _configuration;&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;        &lt;span style="color:#0000ff;"&gt;private&lt;/span&gt; ISessionFactory _sessionFactory;&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;border-style:none;padding:0px;"&gt; &lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;        &lt;span style="color:#0000ff;"&gt;protected&lt;/span&gt; ISessionFactory SessionFactory&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;border-style:none;padding:0px;"&gt;        {&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;            get { &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; _sessionFactory; }&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;border-style:none;padding:0px;"&gt;        }&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt; &lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;border-style:none;padding:0px;"&gt;        [TestFixtureSetUp]&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;        &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; TestFixtureSetUp()&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;border-style:none;padding:0px;"&gt;        {&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;            _configuration = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; Configuration();&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;border-style:none;padding:0px;"&gt;            _configuration.Configure();&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;            _configuration.AddAssembly(&lt;span style="color:#0000ff;"&gt;typeof&lt;/span&gt;(Customer).Assembly);&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;border-style:none;padding:0px;"&gt;            _sessionFactory = _configuration.BuildSessionFactory();&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;        }&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;border-style:none;padding:0px;"&gt; &lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;        [TestFixtureTearDown]&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;border-style:none;padding:0px;"&gt;        &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; TestFixtureTearDown()&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;        {&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;border-style:none;padding:0px;"&gt;            _sessionFactory.Close();&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;        }&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;border-style:none;padding:0px;"&gt; &lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;        [SetUp]&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;border-style:none;padding:0px;"&gt;        &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; SetupContext()&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;        {&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;border-style:none;padding:0px;"&gt;            &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; SchemaExport(_configuration).Execute(&lt;span style="color:#0000ff;"&gt;false&lt;/span&gt;, &lt;span style="color:#0000ff;"&gt;true&lt;/span&gt;, &lt;span style="color:#0000ff;"&gt;false&lt;/span&gt;, &lt;span style="color:#0000ff;"&gt;false&lt;/span&gt;);&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;            Before_each_test();&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;border-style:none;padding:0px;"&gt;        }&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt; &lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;border-style:none;padding:0px;"&gt;        [TearDown]&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;        &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; TearDownContext()&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;border-style:none;padding:0px;"&gt;        {&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;            After_each_test();&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;border-style:none;padding:0px;"&gt;        }&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt; &lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;border-style:none;padding:0px;"&gt;        &lt;span style="color:#0000ff;"&gt;protected&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;virtual&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; Before_each_test()&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;        { }&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;border-style:none;padding:0px;"&gt; &lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;        &lt;span style="color:#0000ff;"&gt;protected&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;virtual&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; After_each_test()&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;border-style:none;padding:0px;"&gt;        { }&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;    }&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;border-style:none;padding:0px;"&gt;}&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;When the test fixture is started, the base class configures NHibernate and creates a session factory (&lt;strong&gt;TestFixtureSetUp&lt;/strong&gt;). When the whole test fixture is ended the session factory is closed (&lt;strong&gt;TestFixtureTearDown&lt;/strong&gt;).&lt;/p&gt;
&lt;p&gt;Before each test in the fixture is run the database schema is (re-) created and the virtual&amp;nbsp;&lt;strong&gt;Before_each_test&lt;/strong&gt;&amp;nbsp;method is called. After each test in the fixture is finished the virtual&amp;nbsp;&lt;strong&gt;After_each_test&lt;/strong&gt;&amp;nbsp;method is called. The two virtual methods can (but must not necessarily) be overridden in a child class.&lt;/p&gt;
&lt;p&gt;All our test fixtures we implement will derive from this base class.&lt;/p&gt;
&lt;h3&gt;Filling the database with test data&lt;/h3&gt;
&lt;p&gt;To be able to test the loading behavior of NHibernate we need some test data in our database. We create this test data every time a test is run (just after the database schema is re-created). We add a new class&amp;nbsp;&lt;strong&gt;Order_Fixture&lt;/strong&gt;&amp;nbsp;to our test project and inherit from the&amp;nbsp;&lt;strong&gt;TestFixtureBase&lt;/strong&gt;&amp;nbsp;base class. Then we override the Before_each_test method and call a helper method which creates our initial data. We create just the absolute minimum of data we need (again --&amp;gt;DRY). That is: one customer placing one order with two order lines.&lt;/p&gt;
&lt;div style="background-color:#f4f4f4;font-family:Consolas, &amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:8pt;line-height:12pt;border:solid 1px gray;cursor:text;margin:20px 0px 10px 0px;max-height:749px;overflow:auto;padding:4px 4px 4px 4px;width:97.5%;"&gt;
&lt;div style="background-color:#f4f4f4;font-family:Consolas, &amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:8pt;line-height:12pt;border-style:none;color:black;overflow:visible;padding:0px 0px 0px 0px;width:100%;"&gt;
&lt;pre style="background-color:white;font-family:Consolas, &amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:8pt;line-height:12pt;border-style:none;color:black;overflow:visible;padding:0px 0px 0px 0px;width:100%;margin:0em;"&gt;&lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; System;&lt;/pre&gt;
&lt;pre style="background-color:#f4f4f4;font-family:Consolas, &amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:8pt;line-height:12pt;border-style:none;color:black;overflow:visible;padding:0px 0px 0px 0px;width:100%;margin:0em;"&gt;&lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; LazyLoadEagerLoad.Domain;&lt;/pre&gt;
&lt;pre style="background-color:white;font-family:Consolas, &amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:8pt;line-height:12pt;border-style:none;color:black;overflow:visible;padding:0px 0px 0px 0px;width:100%;margin:0em;"&gt;&lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; NHibernate;&lt;/pre&gt;
&lt;pre style="background-color:#f4f4f4;font-family:Consolas, &amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:8pt;line-height:12pt;border-style:none;color:black;overflow:visible;padding:0px 0px 0px 0px;width:100%;margin:0em;"&gt;&lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; NHibernate.Criterion;&lt;/pre&gt;
&lt;pre style="background-color:white;font-family:Consolas, &amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:8pt;line-height:12pt;border-style:none;color:black;overflow:visible;padding:0px 0px 0px 0px;width:100%;margin:0em;"&gt;&lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; NHibernate.SqlCommand;&lt;/pre&gt;
&lt;pre style="background-color:#f4f4f4;font-family:Consolas, &amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:8pt;line-height:12pt;border-style:none;color:black;overflow:visible;padding:0px 0px 0px 0px;width:100%;margin:0em;"&gt;&lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; NUnit.Framework;&lt;/pre&gt;
&lt;pre style="background-color:white;font-family:Consolas, &amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:8pt;line-height:12pt;border-style:none;color:black;overflow:visible;padding:0px 0px 0px 0px;width:100%;margin:0em;"&gt;&lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; Order=LazyLoadEagerLoad.Domain.Order;&lt;/pre&gt;
&lt;pre style="background-color:#f4f4f4;font-family:Consolas, &amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:8pt;line-height:12pt;border-style:none;color:black;overflow:visible;padding:0px 0px 0px 0px;width:100%;margin:0em;"&gt; &lt;/pre&gt;
&lt;pre style="background-color:white;font-family:Consolas, &amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:8pt;line-height:12pt;border-style:none;color:black;overflow:visible;padding:0px 0px 0px 0px;width:100%;margin:0em;"&gt;&lt;span style="color:#0000ff;"&gt;namespace&lt;/span&gt; LazyLoadEagerLoad.Tests&lt;/pre&gt;
&lt;pre style="background-color:#f4f4f4;font-family:Consolas, &amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:8pt;line-height:12pt;border-style:none;color:black;overflow:visible;padding:0px 0px 0px 0px;width:100%;margin:0em;"&gt;{&lt;/pre&gt;
&lt;pre style="background-color:white;font-family:Consolas, &amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:8pt;line-height:12pt;border-style:none;color:black;overflow:visible;padding:0px 0px 0px 0px;width:100%;margin:0em;"&gt;    [TestFixture]&lt;/pre&gt;
&lt;pre style="background-color:#f4f4f4;font-family:Consolas, &amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:8pt;line-height:12pt;border-style:none;color:black;overflow:visible;padding:0px 0px 0px 0px;width:100%;margin:0em;"&gt;    &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;class&lt;/span&gt; Order_Fixture : TestFixtureBase&lt;/pre&gt;
&lt;pre style="background-color:white;font-family:Consolas, &amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:8pt;line-height:12pt;border-style:none;color:black;overflow:visible;padding:0px 0px 0px 0px;width:100%;margin:0em;"&gt;    {&lt;/pre&gt;
&lt;pre style="background-color:#f4f4f4;font-family:Consolas, &amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:8pt;line-height:12pt;border-style:none;color:black;overflow:visible;padding:0px 0px 0px 0px;width:100%;margin:0em;"&gt;        &lt;span style="color:#0000ff;"&gt;private&lt;/span&gt; Order _order;&lt;/pre&gt;
&lt;pre style="background-color:white;font-family:Consolas, &amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:8pt;line-height:12pt;border-style:none;color:black;overflow:visible;padding:0px 0px 0px 0px;width:100%;margin:0em;"&gt; &lt;/pre&gt;
&lt;pre style="background-color:#f4f4f4;font-family:Consolas, &amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:8pt;line-height:12pt;border-style:none;color:black;overflow:visible;padding:0px 0px 0px 0px;width:100%;margin:0em;"&gt;        &lt;span style="color:#0000ff;"&gt;protected&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;override&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; Before_each_test()&lt;/pre&gt;
&lt;pre style="background-color:white;font-family:Consolas, &amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:8pt;line-height:12pt;border-style:none;color:black;overflow:visible;padding:0px 0px 0px 0px;width:100%;margin:0em;"&gt;        {&lt;/pre&gt;
&lt;pre style="background-color:#f4f4f4;font-family:Consolas, &amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:8pt;line-height:12pt;border-style:none;color:black;overflow:visible;padding:0px 0px 0px 0px;width:100%;margin:0em;"&gt;            &lt;span style="color:#0000ff;"&gt;base&lt;/span&gt;.Before_each_test();&lt;/pre&gt;
&lt;pre style="background-color:white;font-family:Consolas, &amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:8pt;line-height:12pt;border-style:none;color:black;overflow:visible;padding:0px 0px 0px 0px;width:100%;margin:0em;"&gt;            CreateInitialData();&lt;/pre&gt;
&lt;pre style="background-color:#f4f4f4;font-family:Consolas, &amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:8pt;line-height:12pt;border-style:none;color:black;overflow:visible;padding:0px 0px 0px 0px;width:100%;margin:0em;"&gt;        }&lt;/pre&gt;
&lt;pre style="background-color:white;font-family:Consolas, &amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:8pt;line-height:12pt;border-style:none;color:black;overflow:visible;padding:0px 0px 0px 0px;width:100%;margin:0em;"&gt; &lt;/pre&gt;
&lt;pre style="background-color:#f4f4f4;font-family:Consolas, &amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:8pt;line-height:12pt;border-style:none;color:black;overflow:visible;padding:0px 0px 0px 0px;width:100%;margin:0em;"&gt;        &lt;span style="color:#0000ff;"&gt;private&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; CreateInitialData()&lt;/pre&gt;
&lt;pre style="background-color:white;font-family:Consolas, &amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:8pt;line-height:12pt;border-style:none;color:black;overflow:visible;padding:0px 0px 0px 0px;width:100%;margin:0em;"&gt;        {&lt;/pre&gt;
&lt;pre style="background-color:#f4f4f4;font-family:Consolas, &amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:8pt;line-height:12pt;border-style:none;color:black;overflow:visible;padding:0px 0px 0px 0px;width:100%;margin:0em;"&gt;            &lt;span style="color:#008000;"&gt;// create a single customer and an order with two order lines for this customer&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="background-color:white;font-family:Consolas, &amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:8pt;line-height:12pt;border-style:none;color:black;overflow:visible;padding:0px 0px 0px 0px;width:100%;margin:0em;"&gt;            var customer = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; Customer {CompanyName = &lt;span style="color:#006080;"&gt;&amp;quot;IBM&amp;quot;&lt;/span&gt;};&lt;/pre&gt;
&lt;pre style="background-color:#f4f4f4;font-family:Consolas, &amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:8pt;line-height:12pt;border-style:none;color:black;overflow:visible;padding:0px 0px 0px 0px;width:100%;margin:0em;"&gt;            var line1 = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; OrderLine {Amount = 5, ProductName = &lt;span style="color:#006080;"&gt;&amp;quot;Laptop XYZ&amp;quot;&lt;/span&gt;};&lt;/pre&gt;
&lt;pre style="background-color:white;font-family:Consolas, &amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:8pt;line-height:12pt;border-style:none;color:black;overflow:visible;padding:0px 0px 0px 0px;width:100%;margin:0em;"&gt;            var line2 = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; OrderLine {Amount = 2, ProductName = &lt;span style="color:#006080;"&gt;&amp;quot;Desktop PC A100&amp;quot;&lt;/span&gt;};&lt;/pre&gt;
&lt;pre style="background-color:#f4f4f4;font-family:Consolas, &amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:8pt;line-height:12pt;border-style:none;color:black;overflow:visible;padding:0px 0px 0px 0px;width:100%;margin:0em;"&gt;            _order = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; Order&lt;/pre&gt;
&lt;pre style="background-color:white;font-family:Consolas, &amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:8pt;line-height:12pt;border-style:none;color:black;overflow:visible;padding:0px 0px 0px 0px;width:100%;margin:0em;"&gt;                        {&lt;/pre&gt;
&lt;pre style="background-color:#f4f4f4;font-family:Consolas, &amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:8pt;line-height:12pt;border-style:none;color:black;overflow:visible;padding:0px 0px 0px 0px;width:100%;margin:0em;"&gt;                            OrderNumber = &lt;span style="color:#006080;"&gt;&amp;quot;o-100-001&amp;quot;&lt;/span&gt;,&lt;/pre&gt;
&lt;pre style="background-color:white;font-family:Consolas, &amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:8pt;line-height:12pt;border-style:none;color:black;overflow:visible;padding:0px 0px 0px 0px;width:100%;margin:0em;"&gt;                            OrderDate = DateTime.Today,&lt;/pre&gt;
&lt;pre style="background-color:#f4f4f4;font-family:Consolas, &amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:8pt;line-height:12pt;border-style:none;color:black;overflow:visible;padding:0px 0px 0px 0px;width:100%;margin:0em;"&gt;                            Customer = customer&lt;/pre&gt;
&lt;pre style="background-color:white;font-family:Consolas, &amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:8pt;line-height:12pt;border-style:none;color:black;overflow:visible;padding:0px 0px 0px 0px;width:100%;margin:0em;"&gt;                        };&lt;/pre&gt;
&lt;pre style="background-color:#f4f4f4;font-family:Consolas, &amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:8pt;line-height:12pt;border-style:none;color:black;overflow:visible;padding:0px 0px 0px 0px;width:100%;margin:0em;"&gt;            _order.OrderLines.Add(line1);&lt;/pre&gt;
&lt;pre style="background-color:white;font-family:Consolas, &amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:8pt;line-height:12pt;border-style:none;color:black;overflow:visible;padding:0px 0px 0px 0px;width:100%;margin:0em;"&gt;            _order.OrderLines.Add(line2);&lt;/pre&gt;
&lt;pre style="background-color:#f4f4f4;font-family:Consolas, &amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:8pt;line-height:12pt;border-style:none;color:black;overflow:visible;padding:0px 0px 0px 0px;width:100%;margin:0em;"&gt; &lt;/pre&gt;
&lt;pre style="background-color:white;font-family:Consolas, &amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:8pt;line-height:12pt;border-style:none;color:black;overflow:visible;padding:0px 0px 0px 0px;width:100%;margin:0em;"&gt;            &lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; (ISession session = SessionFactory.OpenSession())&lt;/pre&gt;
&lt;pre style="background-color:#f4f4f4;font-family:Consolas, &amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:8pt;line-height:12pt;border-style:none;color:black;overflow:visible;padding:0px 0px 0px 0px;width:100%;margin:0em;"&gt;                &lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; (ITransaction transaction = session.BeginTransaction())&lt;/pre&gt;
&lt;pre style="background-color:white;font-family:Consolas, &amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:8pt;line-height:12pt;border-style:none;color:black;overflow:visible;padding:0px 0px 0px 0px;width:100%;margin:0em;"&gt;                {&lt;/pre&gt;
&lt;pre style="background-color:#f4f4f4;font-family:Consolas, &amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:8pt;line-height:12pt;border-style:none;color:black;overflow:visible;padding:0px 0px 0px 0px;width:100%;margin:0em;"&gt;                    session.Save(customer);&lt;/pre&gt;
&lt;pre style="background-color:white;font-family:Consolas, &amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:8pt;line-height:12pt;border-style:none;color:black;overflow:visible;padding:0px 0px 0px 0px;width:100%;margin:0em;"&gt;                    session.Save(_order);&lt;/pre&gt;
&lt;pre style="background-color:#f4f4f4;font-family:Consolas, &amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:8pt;line-height:12pt;border-style:none;color:black;overflow:visible;padding:0px 0px 0px 0px;width:100%;margin:0em;"&gt;                    transaction.Commit();&lt;/pre&gt;
&lt;pre style="background-color:white;font-family:Consolas, &amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:8pt;line-height:12pt;border-style:none;color:black;overflow:visible;padding:0px 0px 0px 0px;width:100%;margin:0em;"&gt;                }&lt;/pre&gt;
&lt;pre style="background-color:#f4f4f4;font-family:Consolas, &amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:8pt;line-height:12pt;border-style:none;color:black;overflow:visible;padding:0px 0px 0px 0px;width:100%;margin:0em;"&gt;        }&lt;/pre&gt;
&lt;pre style="background-color:white;font-family:Consolas, &amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:8pt;line-height:12pt;border-style:none;color:black;overflow:visible;padding:0px 0px 0px 0px;width:100%;margin:0em;"&gt;    }&lt;/pre&gt;
&lt;pre style="background-color:#f4f4f4;font-family:Consolas, &amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:8pt;line-height:12pt;border-style:none;color:black;overflow:visible;padding:0px 0px 0px 0px;width:100%;margin:0em;"&gt;}&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;The&amp;nbsp;&lt;strong&gt;CreateInitialData&lt;/strong&gt;&amp;nbsp;method is run before each test. With this we guarantee that each test is side effects free.&lt;/p&gt;
&lt;h3&gt;Verifying the default behavior - Lazy Loading&lt;/h3&gt;
&lt;p&gt;When loading an order entity from database the default behavior of NHibernate is to lazy load all associated objects of the order entity. Let&amp;#39;s write a test to verify this. For the verification we use a utility class provided by NHibernate (NHibernateUtil) which can test whether an associated object or object collection is initialized (i.e. loaded) or not. The class can also force the initialization of an un-initialized relation.&lt;/p&gt;
&lt;div style="font-size:8pt;margin:20px 0px 10px;overflow:auto;width:97.5%;cursor:text;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;height:170px;background-color:#f4f4f4;max-height:200px;border:gray 1px solid;padding:4px;"&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;[Test]
&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; Customer_and_OrderLines_are_not_loaded_when_loading_Order()
{
    Order fromDb;
    &lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; (ISession session = SessionFactory.OpenSession())
        fromDb = session.Get&amp;lt;Order&amp;gt;(_order.Id);
 
    Assert.IsFalse(NHibernateUtil.IsInitialized(fromDb.Customer));
    Assert.IsFalse(NHibernateUtil.IsInitialized(fromDb.OrderLines));
}&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;The test succeeds and NHibernate generates SQL similar to this one&lt;/p&gt;
&lt;div style="font-size:8pt;margin:20px 0px 10px;overflow:auto;width:97.5%;cursor:text;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;height:109px;background-color:#f4f4f4;max-height:200px;border:gray 1px solid;padding:4px;"&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;&lt;span style="color:#0000ff;"&gt;SELECT&lt;/span&gt;    order0_.Id &lt;span style="color:#0000ff;"&gt;as&lt;/span&gt; Id0_0_, 
    order0_.OrderNumber &lt;span style="color:#0000ff;"&gt;as&lt;/span&gt; OrderNum2_0_0_, 
    order0_.OrderDate &lt;span style="color:#0000ff;"&gt;as&lt;/span&gt; OrderDate0_0_, 
    order0_.CustomerId &lt;span style="color:#0000ff;"&gt;as&lt;/span&gt; CustomerId0_0_ 
&lt;span style="color:#0000ff;"&gt;FROM&lt;/span&gt;    Orders order0_ 
&lt;span style="color:#0000ff;"&gt;WHERE&lt;/span&gt;    order0_.Id=&lt;span style="color:#006080;"&gt;&amp;#39;15bca5b3-2771-4bee-9923-85bda66318d8&amp;#39;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Now we have a problem: If we want to access the order line items (after the session has been closed) we get an exception. Since the session is closed NHibernate cannot lazily load the order line items for us. We can show this behavior with the following test method&lt;/p&gt;
&lt;div style="font-size:8pt;margin:20px 0px 10px;overflow:auto;width:97.5%;cursor:text;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;height:202px;background-color:#f4f4f4;max-height:200px;border:gray 1px solid;padding:4px;"&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;[Test]
[ExpectedException(&lt;span style="color:#0000ff;"&gt;typeof&lt;/span&gt;(LazyInitializationException))]
&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; Accessing_customer_of_order_after_session_is_closed_throws()
{
    Order fromDb;
    &lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; (ISession session = SessionFactory.OpenSession())
        fromDb = session.Get&amp;lt;Order&amp;gt;(_order.Id);
    
    &lt;span style="color:#008000;"&gt;// trying to access the Customer of the order, will throw exception&lt;/span&gt;
    &lt;span style="color:#008000;"&gt;// Note: at this point the session is already closed&lt;/span&gt;
    &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; name = fromDb.Customer.CompanyName;
}&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;Note: the above test&amp;nbsp;&lt;strong&gt;only&lt;/strong&gt;&amp;nbsp;succeeds if the method throws the expected exception of type&amp;nbsp;&lt;strong&gt;LazyInitializationException&lt;/strong&gt;. And this is just what we want to show!&lt;/p&gt;
&lt;p&gt;Another problem is the&amp;nbsp;&lt;strong&gt;n+1 select statements problem&lt;/strong&gt;. If we access the order line items after loading the order we generate a select statement for each line item we access. Thus if we have n line items and want to access them all we generate one select statement for the order itself and n select statements for all line items (result: n+1 select statements). This can make our data fetching rather slow and put a (unnecessary) burden onto our database.&lt;/p&gt;
&lt;p&gt;We can simulate this behavior with this test method&lt;/p&gt;
&lt;div style="font-size:8pt;margin:20px 0px 10px;overflow:auto;width:97.5%;cursor:text;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;height:233px;background-color:#f4f4f4;max-height:200px;border:gray 1px solid;padding:4px;"&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;[Test]
&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; Show_n_plus_1_select_behavior()
{
    &lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; (ISession session = SessionFactory.OpenSession())
    {
        var fromDb = session.Get&amp;lt;Order&amp;gt;(_order.Id);
        &lt;span style="color:#0000ff;"&gt;int&lt;/span&gt; sum = 0;
        &lt;span style="color:#0000ff;"&gt;foreach&lt;/span&gt; (var line &lt;span style="color:#0000ff;"&gt;in&lt;/span&gt; fromDb.OrderLines)
        {
            &lt;span style="color:#008000;"&gt;// just some dummy code to force loading of order line&lt;/span&gt;
            sum += line.Amount;
        } 
    }
}&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;NHibernate will generate SQL similar to the following&lt;/p&gt;
&lt;div style="font-size:8pt;margin:20px 0px 10px;overflow:auto;width:97.5%;cursor:text;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;height:235px;background-color:#f4f4f4;max-height:200px;border:gray 1px solid;padding:4px;"&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;&lt;span style="color:#0000ff;"&gt;SELECT&lt;/span&gt; order0_.Id &lt;span style="color:#0000ff;"&gt;as&lt;/span&gt; Id3_0_, 
       order0_.OrderNumber &lt;span style="color:#0000ff;"&gt;as&lt;/span&gt; OrderNum2_3_0_, 
       order0_.OrderDate &lt;span style="color:#0000ff;"&gt;as&lt;/span&gt; OrderDate3_0_, 
       order0_.Customer &lt;span style="color:#0000ff;"&gt;as&lt;/span&gt; Customer3_0_ 
&lt;span style="color:#0000ff;"&gt;FROM&lt;/span&gt;   Orders order0_ 
&lt;span style="color:#0000ff;"&gt;WHERE&lt;/span&gt;  order0_.Id=&lt;span style="color:#006080;"&gt;&amp;#39;5b2dbcb7-d0bf-4c53-86aa-8cd40cb5061a&amp;#39;&lt;/span&gt;
 
&lt;span style="color:#0000ff;"&gt;SELECT&lt;/span&gt; orderlines0_.OrderId &lt;span style="color:#0000ff;"&gt;as&lt;/span&gt; OrderId1_, 
       orderlines0_.Id &lt;span style="color:#0000ff;"&gt;as&lt;/span&gt; Id1_, 
       orderlines0_.Id &lt;span style="color:#0000ff;"&gt;as&lt;/span&gt; Id4_0_, 
       orderlines0_.Amount &lt;span style="color:#0000ff;"&gt;as&lt;/span&gt; Amount4_0_, 
       orderlines0_.ProductName &lt;span style="color:#0000ff;"&gt;as&lt;/span&gt; ProductN3_4_0_ 
&lt;span style="color:#0000ff;"&gt;FROM&lt;/span&gt;   OrderLine orderlines0_ 
&lt;span style="color:#0000ff;"&gt;WHERE&lt;/span&gt;  orderlines0_.OrderId=&lt;span style="color:#006080;"&gt;&amp;#39;5b2dbcb7-d0bf-4c53-86aa-8cd40cb5061a&amp;#39;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;This time we have been lucky! NHibernate has automatically generated an optimized query for us and has loaded the 2 order line items in one go. But this is not always the case! Imagine having a collection with several 100 items and you only need to access one or two of them. It would be a waste of resources to always load all items.&lt;/p&gt;
&lt;p&gt;But fortunately we have a solution for these kind of problems with NHibernate. It&amp;#39;s called eagerly loading.&lt;/p&gt;
&lt;h3&gt;Eagerly loading with the NHibernateUtil class&lt;/h3&gt;
&lt;p&gt;If you know you need have access to related objects of the order entity you can use the&amp;nbsp;&lt;strong&gt;NHibernateUtil&lt;/strong&gt;&amp;nbsp;class to initialize the related objects (that is: to fetch them from the database). Have a look at this test methods&lt;/p&gt;
&lt;div style="font-size:8pt;margin:20px 0px 10px;overflow:auto;width:97.5%;cursor:text;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;height:444px;background-color:#f4f4f4;max-height:444px;border:gray 1px solid;padding:4px;"&gt;
&lt;div style="font-size:8pt;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;border-style:none;padding:0px;"&gt;[Test]&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; Can_initialize_customer_of_order_with_nhibernate_util()&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;border-style:none;padding:0px;"&gt;{&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;    Order fromDb;&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;border-style:none;padding:0px;"&gt;    &lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; (ISession session = SessionFactory.OpenSession())&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;    {&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;border-style:none;padding:0px;"&gt;        fromDb = session.Get&amp;lt;Order&amp;gt;(_order.Id);&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;        NHibernateUtil.Initialize(fromDb.Customer);&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;border-style:none;padding:0px;"&gt;    }&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt; &lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;border-style:none;padding:0px;"&gt;    Assert.IsTrue(NHibernateUtil.IsInitialized(fromDb.Customer));&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;    Assert.IsFalse(NHibernateUtil.IsInitialized(fromDb.OrderLines));&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;border-style:none;padding:0px;"&gt;}&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt; &lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;border-style:none;padding:0px;"&gt;[Test]&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; Can_initialize_order_lines_of_order_with_nhibernate_util()&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;border-style:none;padding:0px;"&gt;{&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;    Order fromDb;&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;border-style:none;padding:0px;"&gt;    &lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; (ISession session = SessionFactory.OpenSession())&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;    {&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;border-style:none;padding:0px;"&gt;        fromDb = session.Get&amp;lt;Order&amp;gt;(_order.Id);&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;        NHibernateUtil.Initialize(fromDb.OrderLines);&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;border-style:none;padding:0px;"&gt;    }&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt; &lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;border-style:none;padding:0px;"&gt;    Assert.IsFalse(NHibernateUtil.IsInitialized(fromDb.Customer));&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;    Assert.IsTrue(NHibernateUtil.IsInitialized(fromDb.OrderLines));&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;border-style:none;padding:0px;"&gt;}&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;With this utility class you can initialize single objects as well as collection of objects. In each case NHibernate will send 2 select statements to the database. One to select the order and one to initialize the related object(s).&lt;/p&gt;
&lt;h3&gt;Eagerly loading with HQL&lt;/h3&gt;
&lt;p&gt;If you know that you want to load all order items of a given order then you can tell NHibernate to do so and eagerly load all order lines together with the order in one go. The following test method shows how you can formulate a HQL query which not only loads the order but also the associated customer and order lines.&lt;/p&gt;
&lt;div style="font-size:8pt;margin:20px 0px 10px;overflow:auto;width:97.5%;cursor:text;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;height:286px;background-color:#f4f4f4;max-height:286px;border:gray 1px solid;padding:4px;"&gt;
&lt;div style="font-size:8pt;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;border-style:none;padding:0px;"&gt;[Test]&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; Can_eagerly_load_order_aggregate_with_hql_query()&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;border-style:none;padding:0px;"&gt;{&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;    Order fromDb;&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;border-style:none;padding:0px;"&gt;    &lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; (ISession session = SessionFactory.OpenSession())&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;    {&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;border-style:none;padding:0px;"&gt;        &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; sql = &lt;span style="color:#006080;"&gt;&amp;quot;from Order o&amp;quot;&lt;/span&gt; +&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;                     &lt;span style="color:#006080;"&gt;&amp;quot; inner join fetch o.OrderLines&amp;quot;&lt;/span&gt; +&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;border-style:none;padding:0px;"&gt;                     &lt;span style="color:#006080;"&gt;&amp;quot; inner join fetch o.Customer&amp;quot;&lt;/span&gt; +&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;                     &lt;span style="color:#006080;"&gt;&amp;quot; where o.Id=:id&amp;quot;&lt;/span&gt;;&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;border-style:none;padding:0px;"&gt;        fromDb = session.CreateQuery(sql)&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;                        .SetGuid(&lt;span style="color:#006080;"&gt;&amp;quot;id&amp;quot;&lt;/span&gt;, _order.Id)&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;border-style:none;padding:0px;"&gt;                        .UniqueResult&amp;lt;Order&amp;gt;();&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;    }&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;border-style:none;padding:0px;"&gt;    Assert.IsTrue(NHibernateUtil.IsInitialized(fromDb.Customer));&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;    Assert.IsTrue(NHibernateUtil.IsInitialized(fromDb.OrderLines));&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;border-style:none;padding:0px;"&gt;}&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;The resulting sql generated by NHibernate is then similar to this one&lt;/p&gt;
&lt;div style="font-size:8pt;margin:20px 0px 10px;overflow:auto;width:97.5%;cursor:text;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;height:261px;background-color:#f4f4f4;max-height:260px;border:gray 1px solid;padding:4px;"&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;&lt;span style="color:#0000ff;"&gt;select&lt;/span&gt;      order0_.Id &lt;span style="color:#0000ff;"&gt;as&lt;/span&gt; Id0_0_, 
            orderlines1_.Id &lt;span style="color:#0000ff;"&gt;as&lt;/span&gt; Id1_1_, 
            customer2_.Id &lt;span style="color:#0000ff;"&gt;as&lt;/span&gt; Id2_2_, 
            order0_.OrderNumber &lt;span style="color:#0000ff;"&gt;as&lt;/span&gt; OrderNum2_0_0_, 
            order0_.OrderDate &lt;span style="color:#0000ff;"&gt;as&lt;/span&gt; OrderDate0_0_, 
            order0_.CustomerId &lt;span style="color:#0000ff;"&gt;as&lt;/span&gt; CustomerId0_0_, 
            orderlines1_.Amount &lt;span style="color:#0000ff;"&gt;as&lt;/span&gt; Amount1_1_, 
            orderlines1_.ProductName &lt;span style="color:#0000ff;"&gt;as&lt;/span&gt; ProductN3_1_1_, 
            customer2_.CompanyName &lt;span style="color:#0000ff;"&gt;as&lt;/span&gt; CompanyN2_2_2_, 
            orderlines1_.OrderId &lt;span style="color:#0000ff;"&gt;as&lt;/span&gt; OrderId0__, 
            orderlines1_.Id &lt;span style="color:#0000ff;"&gt;as&lt;/span&gt; Id0__ 
&lt;span style="color:#0000ff;"&gt;from&lt;/span&gt;        Orders order0_ 
&lt;span style="color:#0000ff;"&gt;inner&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;join&lt;/span&gt;  OrderLine orderlines1_ &lt;span style="color:#0000ff;"&gt;on&lt;/span&gt; order0_.Id=orderlines1_.OrderId 
&lt;span style="color:#0000ff;"&gt;inner&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;join&lt;/span&gt;  Customer customer2_ &lt;span style="color:#0000ff;"&gt;on&lt;/span&gt; order0_.CustomerId=customer2_.Id 
&lt;span style="color:#0000ff;"&gt;where&lt;/span&gt;       order0_.Id=&lt;span style="color:#006080;"&gt;&amp;#39;409ebd99-3206-459b-bfed-6df989284da9&amp;#39;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;NHibernate has created an SQL select statement which joins the 3 tables involved, namely&amp;nbsp;&lt;strong&gt;Orders&lt;/strong&gt;,&amp;nbsp;&lt;strong&gt;Customer&lt;/strong&gt;&amp;nbsp;and&lt;strong&gt;OrderLine&lt;/strong&gt;. The returned (flat) set of records is then used by NHibernate to build up the object tree with the order entity as a root.&lt;/p&gt;
&lt;h2&gt;Aggregates in the Domain&lt;/h2&gt;
&lt;p&gt;DDD defines the concept of&amp;nbsp;&lt;a href="http://domaindrivendesign.org/discussion/messageboardarchive/Aggregates.html"&gt;aggregates&lt;/a&gt;. A short definition of an aggregate is &amp;quot;&lt;em&gt;A cluster of associated objects that are treated as a unit for the purpose of data changes.&amp;quot;.&amp;nbsp;&lt;/em&gt;An aggregate always has a&amp;nbsp;&lt;em&gt;root&lt;/em&gt;.&lt;em&gt;&amp;nbsp;&lt;/em&gt;In this context we can define the following aggregate in our domain&lt;/p&gt;
&lt;p&gt;&lt;a href="/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/nhibernate/image_5F00_8.png"&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;&lt;img border="0" width="575" src="/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/nhibernate/image_5F00_thumb_5F00_3.png" alt="image" height="445" /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="background: SpringGreen;"&gt;&lt;img src="/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/nhibernate/LazyLoadingEagerLoadingAggDomain.png" alt="" /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;The order entity is the&amp;nbsp;&lt;em&gt;root&lt;/em&gt;&amp;nbsp;and the order lines belong to the aggregate (can be regarded as children of the&amp;nbsp;&lt;em&gt;root&lt;/em&gt;). When creating a new order or changing an existing one we only want to modify either the order itself or its order lines. We certainly do not want to change the customer entity because this would be a completely different use case and does not belong to the&amp;nbsp;&lt;em&gt;order management&lt;/em&gt;&amp;nbsp;use case.&lt;/p&gt;
&lt;p&gt;So, when dealing with aggregates we often want to load the complete aggregate in one go! This is the perfect example for using&amp;nbsp;&lt;strong&gt;eager loading&lt;/strong&gt;&amp;nbsp;techniques.&lt;/p&gt;
&lt;h2&gt;Summary&lt;/h2&gt;
&lt;p&gt;I have introduced the concept of lazy loading as provided by NHibernate. I have discussed the consequences and shown how to avoid negative side effects by using different techniques of so called eager loading.&lt;/p&gt;</description></item><item><title>Lazy loading - eager loading</title><link>http://nhforge.org/wikis/howtonh/lazy-loading-eager-loading/revision/5.aspx</link><pubDate>Sun, 07 Sep 2008 04:34:42 GMT</pubDate><guid isPermaLink="false">45f813f2-f1c4-4eda-a619-288e3cadc793:96</guid><dc:creator>Fabio Maulo</dc:creator><comments>http://nhforge.org/wikis/howtonh/lazy-loading-eager-loading/comments.aspx</comments><description>Revision 5 posted to How to by Fabio Maulo on 07/09/2008 01:34:42 a.m.&lt;br /&gt;
&lt;h2&gt;Lazy loading - eager loading&lt;/h2&gt;
&lt;p&gt;&lt;span&gt;
&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/nhibernate/Blog-Signature-Gabriel_5F00_4.png"&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;&lt;img height="21" alt="Blog Signature Gabriel" src="/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/nhibernate/Blog-Signature-Gabriel_5F00_thumb_5F00_1.png" width="244" border="0" /&gt;&lt;/span&gt;&lt;p&gt;&lt;span&gt;
&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;In this article I want to discuss the&amp;nbsp;&lt;a href="http://martinfowler.com/eaaCatalog/lazyLoad.html"&gt;lazy loading&lt;/a&gt;&amp;nbsp;mechanism provided by NHibernate. It is recommended for maximum flexibility to define all relations in your domain as lazy loadable. This is the default behavior of NHibernate since version 1.2. But this can lead to some undesired effects if querying your data. Let&amp;#39;s discuss these effects and how to avoid them.&lt;/p&gt;
&lt;p&gt;In my previous posts I showed&amp;nbsp;&lt;a href="http://blogs.hibernatingrhinos.com/nhibernate/archive/2008/03/31/prepare-your-system-for-nhibernate.aspx"&gt;how to prepare your system for NHibernate&lt;/a&gt;&amp;nbsp;and&amp;nbsp;&lt;a href="/wikis/howtonh/your-first-nhibernate-based-application.aspx"&gt;how to implement a first NHibernate base application&lt;/a&gt;. This post is based on those two articles.&lt;/p&gt;
&lt;h2&gt;The Domain&lt;/h2&gt;
&lt;p&gt;Let&amp;#39;s first define a simple domain. It shows part of an order entry system. I keep this model as simple as possible (a real domain model would be more complex) but it contains all aspects we want to discuss in this post. Below is the class diagram of our model&lt;/p&gt;
&lt;p&gt;&lt;a href="/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/nhibernate/image_5F00_4.png"&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;&lt;img height="389" alt="image" src="/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/nhibernate/image_5F00_thumb_5F00_1.png" width="480" border="0" /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/nhibernate/image_5F00_4.png"&gt;&lt;span style="background: SpringGreen;"&gt;&lt;img border="0" width="480" src="/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/nhibernate/image_5F00_thumb_5F00_1.png" alt="image" height="389" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;We have an order entity which can be placed by a customer entity. Each order can have many order line entities. Each of the three entity types is uniquely identified by a property Id (surrogate key).&lt;/p&gt;
&lt;h2&gt;The Mapping Files&lt;/h2&gt;
&lt;p&gt;We have to write one mapping file per entity. It is recommended that you always have one mapping per file. Don&amp;#39;t forget to set the&amp;nbsp;&lt;strong&gt;Build Action&lt;/strong&gt;&amp;nbsp;of each mapping file to&amp;nbsp;&lt;strong&gt;Embedded Resource&lt;/strong&gt;. People often tend to forget it and the subsequent errors raised by NHibernate are not always obvious. Also do not forget to give the mapping files the correct name, that is *.&lt;strong&gt;hbm&lt;/strong&gt;.xml where * denotes the placeholder for the entity name.&lt;/p&gt;
&lt;p&gt;The mapping for the&amp;nbsp;&lt;strong&gt;Order&lt;/strong&gt;&amp;nbsp;entity might be implemented as follows&lt;/p&gt;
&lt;pre style="width:100%;"&gt;&lt;div&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;?&lt;/span&gt;&lt;span style="color:#FF00FF;"&gt;xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot; &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;?&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;hibernate-mapping &lt;/span&gt;&lt;span style="color:#FF0000;"&gt;xmlns&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;=&amp;quot;urn:nhibernate-mapping-2.2&amp;quot;&lt;/span&gt;&lt;span style="color:#FF0000;"&gt;
                   assembly&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;=&amp;quot;LazyLoadEagerLoad&amp;quot;&lt;/span&gt;&lt;span style="color:#FF0000;"&gt;
                   namespace&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;=&amp;quot;LazyLoadEagerLoad.Domain&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
  
  &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;class &lt;/span&gt;&lt;span style="color:#FF0000;"&gt;name&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;=&amp;quot;Order&amp;quot;&lt;/span&gt;&lt;span style="color:#FF0000;"&gt; table&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;=&amp;quot;Orders&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
    &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;id &lt;/span&gt;&lt;span style="color:#FF0000;"&gt;name&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;=&amp;quot;Id&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
      &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;generator &lt;/span&gt;&lt;span style="color:#FF0000;"&gt;class&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;=&amp;quot;guid&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
    &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;id&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
    &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;property &lt;/span&gt;&lt;span style="color:#FF0000;"&gt;name&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;=&amp;quot;OrderNumber&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
    &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;property &lt;/span&gt;&lt;span style="color:#FF0000;"&gt;name&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;=&amp;quot;OrderDate&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
    
    &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;many-to-one &lt;/span&gt;&lt;span style="color:#FF0000;"&gt;name&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;=&amp;quot;Customer&amp;quot;&lt;/span&gt;&lt;span style="color:#FF0000;"&gt; &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
 
    &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;set &lt;/span&gt;&lt;span style="color:#FF0000;"&gt;name&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;=&amp;quot;OrderLines&amp;quot;&lt;/span&gt;&lt;span style="color:#FF0000;"&gt; cascade&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;=&amp;quot;all-delete-orphan&amp;quot;&lt;/span&gt;&lt;span style="color:#FF0000;"&gt; &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
      &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;key &lt;/span&gt;&lt;span style="color:#FF0000;"&gt;column&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;=&amp;quot;OrderId&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
      &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;one-to-many &lt;/span&gt;&lt;span style="color:#FF0000;"&gt;class&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;=&amp;quot;OrderLine&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
    &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;set&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
    
  &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;class&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
  
&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;hibernate-mapping&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;
&lt;p&gt;Analogous you can implement the mappings for the&amp;nbsp;&lt;strong&gt;Customer&lt;/strong&gt;&amp;nbsp;entity&lt;/p&gt;
&lt;div style="padding-right:0px;display:inline;padding-left:0px;float:none;padding-bottom:0px;margin:0px;padding-top:0px;" id="scid:F2210F5F-69EB-4d4c-AFF7-B8A050E9CC72:3acfe276-b736-4c58-88ae-7c262976b50f" class="wlWriterEditableSmartContent"&gt;
&lt;pre style="width:100%;"&gt;&lt;div&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;?&lt;/span&gt;&lt;span style="color:#FF00FF;"&gt;xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot; &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;?&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt; 
&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;hibernate-mapping &lt;/span&gt;&lt;span style="color:#FF0000;"&gt;xmlns&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;=&amp;quot;urn:nhibernate-mapping-2.2&amp;quot;&lt;/span&gt;&lt;span style="color:#FF0000;"&gt;
                   assembly&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;=&amp;quot;LazyLoadEagerLoad&amp;quot;&lt;/span&gt;&lt;span style="color:#FF0000;"&gt;
                   namespace&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;=&amp;quot;LazyLoadEagerLoad.Domain&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
  
  &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;class &lt;/span&gt;&lt;span style="color:#FF0000;"&gt;name&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;=&amp;quot;Customer&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
    &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;id &lt;/span&gt;&lt;span style="color:#FF0000;"&gt;name&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;=&amp;quot;Id&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
      &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;generator &lt;/span&gt;&lt;span style="color:#FF0000;"&gt;class&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;=&amp;quot;guid&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
    &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;id&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
    &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;property &lt;/span&gt;&lt;span style="color:#FF0000;"&gt;name&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;=&amp;quot;CompanyName&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
  &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;class&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
 
&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;hibernate-mapping&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;and finally the mapping for the&amp;nbsp;&lt;strong&gt;OrderLine&lt;/strong&gt;&amp;nbsp;entity.&lt;/p&gt;
&lt;div style="padding-right:0px;display:inline;padding-left:0px;float:none;padding-bottom:0px;margin:0px;padding-top:0px;" id="scid:F2210F5F-69EB-4d4c-AFF7-B8A050E9CC72:23053d0d-5f88-44d1-8099-ff8406d62f4e" class="wlWriterEditableSmartContent"&gt;
&lt;pre style="width:100%;"&gt;&lt;div&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;?&lt;/span&gt;&lt;span style="color:#FF00FF;"&gt;xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot; &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;?&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt; 
&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;hibernate-mapping &lt;/span&gt;&lt;span style="color:#FF0000;"&gt;xmlns&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;=&amp;quot;urn:nhibernate-mapping-2.2&amp;quot;&lt;/span&gt;&lt;span style="color:#FF0000;"&gt;
                   assembly&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;=&amp;quot;LazyLoadEagerLoad&amp;quot;&lt;/span&gt;&lt;span style="color:#FF0000;"&gt;
                   namespace&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;=&amp;quot;LazyLoadEagerLoad.Domain&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
 
  &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;class &lt;/span&gt;&lt;span style="color:#FF0000;"&gt;name&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;=&amp;quot;OrderLine&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
    &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;id &lt;/span&gt;&lt;span style="color:#FF0000;"&gt;name&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;=&amp;quot;Id&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
      &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;generator &lt;/span&gt;&lt;span style="color:#FF0000;"&gt;class&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;=&amp;quot;guid&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
    &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;id&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
    &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;property &lt;/span&gt;&lt;span style="color:#FF0000;"&gt;name&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;=&amp;quot;Amount&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
    &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;property &lt;/span&gt;&lt;span style="color:#FF0000;"&gt;name&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;=&amp;quot;ProductName&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
  &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;class&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
  
&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;hibernate-mapping&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;Testing the Mapping&lt;/h2&gt;
&lt;p&gt;To test the mapping we use the following test method&lt;/p&gt;
&lt;div style="font-size:8pt;margin:20px 0px 10px;overflow:auto;width:97.5%;cursor:text;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;max-height:370px;border:gray 1px solid;padding:4px;"&gt;
&lt;div style="font-size:8pt;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;border-style:none;padding:0px;"&gt;&lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; LazyLoadEagerLoad.Domain;&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;&lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; NHibernate.Cfg;&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;border-style:none;padding:0px;"&gt;&lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; NHibernate.Tool.hbm2ddl;&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;&lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; NUnit.Framework;&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;border-style:none;padding:0px;"&gt; &lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;&lt;span style="color:#0000ff;"&gt;namespace&lt;/span&gt; LazyLoadEagerLoad.Tests&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;border-style:none;padding:0px;"&gt;{&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;    [TestFixture]&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;border-style:none;padding:0px;"&gt;    &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;class&lt;/span&gt; GenerateSchema_Fixture&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;    {&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;border-style:none;padding:0px;"&gt;        [Test]&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;        &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; Can_generate_schema()&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;border-style:none;padding:0px;"&gt;        {&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;            var cfg = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; Configuration();&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;border-style:none;padding:0px;"&gt;            cfg.Configure();&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;            cfg.AddAssembly(&lt;span style="color:#0000ff;"&gt;typeof&lt;/span&gt;(Order).Assembly);&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;border-style:none;padding:0px;"&gt; &lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;            &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; SchemaExport(cfg).Execute(&lt;span style="color:#0000ff;"&gt;false&lt;/span&gt;, &lt;span style="color:#0000ff;"&gt;true&lt;/span&gt;, &lt;span style="color:#0000ff;"&gt;false&lt;/span&gt;, &lt;span style="color:#0000ff;"&gt;false&lt;/span&gt;);&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;border-style:none;padding:0px;"&gt;        }&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;    }&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;border-style:none;padding:0px;"&gt;}&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;
First we create a new instance of the NHibernate Configuration class and tell it to configure itself. Since we don&amp;#39;t provide any explicit configuration here in the code NHibernate looks out for an adequate configuration file. I have included such a file (called hibernate.cfg.xml) in my project. Please consult&amp;nbsp;&lt;a href="http://blogs.hibernatingrhinos.com/nhibernate/archive/2008/04/01/your-first-nhibernate-based-application.aspx"&gt;this&lt;/a&gt;&amp;nbsp;previous post for further details about the configuration file.
&lt;/p&gt;
&lt;h2&gt;Testing the Loading Behavior of NHibernate&lt;/h2&gt;
&lt;h3&gt;Defining a base class for our tests&lt;/h3&gt;
&lt;p&gt;To avoid repetitive task (&lt;a href="http://en.wikipedia.org/wiki/Don&amp;#39;t_repeat_yourself"&gt;DRY&lt;/a&gt;&amp;nbsp;principle) we implement the following base class.&lt;/p&gt;
&lt;div style="font-size:8pt;margin:20px 0px 10px;overflow:auto;width:97.5%;cursor:text;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;height:866px;background-color:#f4f4f4;max-height:866px;border:gray 1px solid;padding:4px;"&gt;
&lt;div style="font-size:8pt;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;border-style:none;padding:0px;"&gt;&lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; LazyLoadEagerLoad.Domain;&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;&lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; NHibernate;&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;border-style:none;padding:0px;"&gt;&lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; NHibernate.Cfg;&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;&lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; NHibernate.Tool.hbm2ddl;&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;border-style:none;padding:0px;"&gt;&lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; NUnit.Framework;&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt; &lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;border-style:none;padding:0px;"&gt;&lt;span style="color:#0000ff;"&gt;namespace&lt;/span&gt; LazyLoadEagerLoad.Tests&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;{&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;border-style:none;padding:0px;"&gt;    &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;class&lt;/span&gt; TestFixtureBase&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;    {&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;border-style:none;padding:0px;"&gt;        &lt;span style="color:#0000ff;"&gt;private&lt;/span&gt; Configuration _configuration;&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;        &lt;span style="color:#0000ff;"&gt;private&lt;/span&gt; ISessionFactory _sessionFactory;&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;border-style:none;padding:0px;"&gt; &lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;        &lt;span style="color:#0000ff;"&gt;protected&lt;/span&gt; ISessionFactory SessionFactory&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;border-style:none;padding:0px;"&gt;        {&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;            get { &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; _sessionFactory; }&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;border-style:none;padding:0px;"&gt;        }&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt; &lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;border-style:none;padding:0px;"&gt;        [TestFixtureSetUp]&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;        &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; TestFixtureSetUp()&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;border-style:none;padding:0px;"&gt;        {&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;            _configuration = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; Configuration();&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;border-style:none;padding:0px;"&gt;            _configuration.Configure();&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;            _configuration.AddAssembly(&lt;span style="color:#0000ff;"&gt;typeof&lt;/span&gt;(Customer).Assembly);&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;border-style:none;padding:0px;"&gt;            _sessionFactory = _configuration.BuildSessionFactory();&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;        }&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;border-style:none;padding:0px;"&gt; &lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;        [TestFixtureTearDown]&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;border-style:none;padding:0px;"&gt;        &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; TestFixtureTearDown()&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;        {&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;border-style:none;padding:0px;"&gt;            _sessionFactory.Close();&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;        }&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;border-style:none;padding:0px;"&gt; &lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;        [SetUp]&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;border-style:none;padding:0px;"&gt;        &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; SetupContext()&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;        {&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;border-style:none;padding:0px;"&gt;            &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; SchemaExport(_configuration).Execute(&lt;span style="color:#0000ff;"&gt;false&lt;/span&gt;, &lt;span style="color:#0000ff;"&gt;true&lt;/span&gt;, &lt;span style="color:#0000ff;"&gt;false&lt;/span&gt;, &lt;span style="color:#0000ff;"&gt;false&lt;/span&gt;);&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;            Before_each_test();&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;border-style:none;padding:0px;"&gt;        }&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt; &lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;border-style:none;padding:0px;"&gt;        [TearDown]&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;        &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; TearDownContext()&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;border-style:none;padding:0px;"&gt;        {&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;            After_each_test();&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;border-style:none;padding:0px;"&gt;        }&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt; &lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;border-style:none;padding:0px;"&gt;        &lt;span style="color:#0000ff;"&gt;protected&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;virtual&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; Before_each_test()&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;        { }&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;border-style:none;padding:0px;"&gt; &lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;        &lt;span style="color:#0000ff;"&gt;protected&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;virtual&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; After_each_test()&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;border-style:none;padding:0px;"&gt;        { }&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;    }&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;border-style:none;padding:0px;"&gt;}&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;When the test fixture is started, the base class configures NHibernate and creates a session factory (&lt;strong&gt;TestFixtureSetUp&lt;/strong&gt;). When the whole test fixture is ended the session factory is closed (&lt;strong&gt;TestFixtureTearDown&lt;/strong&gt;).&lt;/p&gt;
&lt;p&gt;Before each test in the fixture is run the database schema is (re-) created and the virtual&amp;nbsp;&lt;strong&gt;Before_each_test&lt;/strong&gt;&amp;nbsp;method is called. After each test in the fixture is finished the virtual&amp;nbsp;&lt;strong&gt;After_each_test&lt;/strong&gt;&amp;nbsp;method is called. The two virtual methods can (but must not necessarily) be overridden in a child class.&lt;/p&gt;
&lt;p&gt;All our test fixtures we implement will derive from this base class.&lt;/p&gt;
&lt;h3&gt;Filling the database with test data&lt;/h3&gt;
&lt;p&gt;To be able to test the loading behavior of NHibernate we need some test data in our database. We create this test data every time a test is run (just after the database schema is re-created). We add a new class&amp;nbsp;&lt;strong&gt;Order_Fixture&lt;/strong&gt;&amp;nbsp;to our test project and inherit from the&amp;nbsp;&lt;strong&gt;TestFixtureBase&lt;/strong&gt;&amp;nbsp;base class. Then we override the Before_each_test method and call a helper method which creates our initial data. We create just the absolute minimum of data we need (again --&amp;gt;DRY). That is: one customer placing one order with two order lines.&lt;/p&gt;
&lt;div style="background-color:#f4f4f4;font-family:Consolas, &amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:8pt;line-height:12pt;border:solid 1px gray;cursor:text;margin:20px 0px 10px 0px;max-height:749px;overflow:auto;padding:4px 4px 4px 4px;width:97.5%;"&gt;
&lt;div style="background-color:#f4f4f4;font-family:Consolas, &amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:8pt;line-height:12pt;border-style:none;color:black;overflow:visible;padding:0px 0px 0px 0px;width:100%;"&gt;
&lt;pre style="background-color:white;font-family:Consolas, &amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:8pt;line-height:12pt;border-style:none;color:black;overflow:visible;padding:0px 0px 0px 0px;width:100%;margin:0em;"&gt;&lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; System;&lt;/pre&gt;
&lt;pre style="background-color:#f4f4f4;font-family:Consolas, &amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:8pt;line-height:12pt;border-style:none;color:black;overflow:visible;padding:0px 0px 0px 0px;width:100%;margin:0em;"&gt;&lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; LazyLoadEagerLoad.Domain;&lt;/pre&gt;
&lt;pre style="background-color:white;font-family:Consolas, &amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:8pt;line-height:12pt;border-style:none;color:black;overflow:visible;padding:0px 0px 0px 0px;width:100%;margin:0em;"&gt;&lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; NHibernate;&lt;/pre&gt;
&lt;pre style="background-color:#f4f4f4;font-family:Consolas, &amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:8pt;line-height:12pt;border-style:none;color:black;overflow:visible;padding:0px 0px 0px 0px;width:100%;margin:0em;"&gt;&lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; NHibernate.Criterion;&lt;/pre&gt;
&lt;pre style="background-color:white;font-family:Consolas, &amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:8pt;line-height:12pt;border-style:none;color:black;overflow:visible;padding:0px 0px 0px 0px;width:100%;margin:0em;"&gt;&lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; NHibernate.SqlCommand;&lt;/pre&gt;
&lt;pre style="background-color:#f4f4f4;font-family:Consolas, &amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:8pt;line-height:12pt;border-style:none;color:black;overflow:visible;padding:0px 0px 0px 0px;width:100%;margin:0em;"&gt;&lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; NUnit.Framework;&lt;/pre&gt;
&lt;pre style="background-color:white;font-family:Consolas, &amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:8pt;line-height:12pt;border-style:none;color:black;overflow:visible;padding:0px 0px 0px 0px;width:100%;margin:0em;"&gt;&lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; Order=LazyLoadEagerLoad.Domain.Order;&lt;/pre&gt;
&lt;pre style="background-color:#f4f4f4;font-family:Consolas, &amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:8pt;line-height:12pt;border-style:none;color:black;overflow:visible;padding:0px 0px 0px 0px;width:100%;margin:0em;"&gt; &lt;/pre&gt;
&lt;pre style="background-color:white;font-family:Consolas, &amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:8pt;line-height:12pt;border-style:none;color:black;overflow:visible;padding:0px 0px 0px 0px;width:100%;margin:0em;"&gt;&lt;span style="color:#0000ff;"&gt;namespace&lt;/span&gt; LazyLoadEagerLoad.Tests&lt;/pre&gt;
&lt;pre style="background-color:#f4f4f4;font-family:Consolas, &amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:8pt;line-height:12pt;border-style:none;color:black;overflow:visible;padding:0px 0px 0px 0px;width:100%;margin:0em;"&gt;{&lt;/pre&gt;
&lt;pre style="background-color:white;font-family:Consolas, &amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:8pt;line-height:12pt;border-style:none;color:black;overflow:visible;padding:0px 0px 0px 0px;width:100%;margin:0em;"&gt;    [TestFixture]&lt;/pre&gt;
&lt;pre style="background-color:#f4f4f4;font-family:Consolas, &amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:8pt;line-height:12pt;border-style:none;color:black;overflow:visible;padding:0px 0px 0px 0px;width:100%;margin:0em;"&gt;    &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;class&lt;/span&gt; Order_Fixture : TestFixtureBase&lt;/pre&gt;
&lt;pre style="background-color:white;font-family:Consolas, &amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:8pt;line-height:12pt;border-style:none;color:black;overflow:visible;padding:0px 0px 0px 0px;width:100%;margin:0em;"&gt;    {&lt;/pre&gt;
&lt;pre style="background-color:#f4f4f4;font-family:Consolas, &amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:8pt;line-height:12pt;border-style:none;color:black;overflow:visible;padding:0px 0px 0px 0px;width:100%;margin:0em;"&gt;        &lt;span style="color:#0000ff;"&gt;private&lt;/span&gt; Order _order;&lt;/pre&gt;
&lt;pre style="background-color:white;font-family:Consolas, &amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:8pt;line-height:12pt;border-style:none;color:black;overflow:visible;padding:0px 0px 0px 0px;width:100%;margin:0em;"&gt; &lt;/pre&gt;
&lt;pre style="background-color:#f4f4f4;font-family:Consolas, &amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:8pt;line-height:12pt;border-style:none;color:black;overflow:visible;padding:0px 0px 0px 0px;width:100%;margin:0em;"&gt;        &lt;span style="color:#0000ff;"&gt;protected&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;override&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; Before_each_test()&lt;/pre&gt;
&lt;pre style="background-color:white;font-family:Consolas, &amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:8pt;line-height:12pt;border-style:none;color:black;overflow:visible;padding:0px 0px 0px 0px;width:100%;margin:0em;"&gt;        {&lt;/pre&gt;
&lt;pre style="background-color:#f4f4f4;font-family:Consolas, &amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:8pt;line-height:12pt;border-style:none;color:black;overflow:visible;padding:0px 0px 0px 0px;width:100%;margin:0em;"&gt;            &lt;span style="color:#0000ff;"&gt;base&lt;/span&gt;.Before_each_test();&lt;/pre&gt;
&lt;pre style="background-color:white;font-family:Consolas, &amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:8pt;line-height:12pt;border-style:none;color:black;overflow:visible;padding:0px 0px 0px 0px;width:100%;margin:0em;"&gt;            CreateInitialData();&lt;/pre&gt;
&lt;pre style="background-color:#f4f4f4;font-family:Consolas, &amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:8pt;line-height:12pt;border-style:none;color:black;overflow:visible;padding:0px 0px 0px 0px;width:100%;margin:0em;"&gt;        }&lt;/pre&gt;
&lt;pre style="background-color:white;font-family:Consolas, &amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:8pt;line-height:12pt;border-style:none;color:black;overflow:visible;padding:0px 0px 0px 0px;width:100%;margin:0em;"&gt; &lt;/pre&gt;
&lt;pre style="background-color:#f4f4f4;font-family:Consolas, &amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:8pt;line-height:12pt;border-style:none;color:black;overflow:visible;padding:0px 0px 0px 0px;width:100%;margin:0em;"&gt;        &lt;span style="color:#0000ff;"&gt;private&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; CreateInitialData()&lt;/pre&gt;
&lt;pre style="background-color:white;font-family:Consolas, &amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:8pt;line-height:12pt;border-style:none;color:black;overflow:visible;padding:0px 0px 0px 0px;width:100%;margin:0em;"&gt;        {&lt;/pre&gt;
&lt;pre style="background-color:#f4f4f4;font-family:Consolas, &amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:8pt;line-height:12pt;border-style:none;color:black;overflow:visible;padding:0px 0px 0px 0px;width:100%;margin:0em;"&gt;            &lt;span style="color:#008000;"&gt;// create a single customer and an order with two order lines for this customer&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="background-color:white;font-family:Consolas, &amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:8pt;line-height:12pt;border-style:none;color:black;overflow:visible;padding:0px 0px 0px 0px;width:100%;margin:0em;"&gt;            var customer = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; Customer {CompanyName = &lt;span style="color:#006080;"&gt;&amp;quot;IBM&amp;quot;&lt;/span&gt;};&lt;/pre&gt;
&lt;pre style="background-color:#f4f4f4;font-family:Consolas, &amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:8pt;line-height:12pt;border-style:none;color:black;overflow:visible;padding:0px 0px 0px 0px;width:100%;margin:0em;"&gt;            var line1 = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; OrderLine {Amount = 5, ProductName = &lt;span style="color:#006080;"&gt;&amp;quot;Laptop XYZ&amp;quot;&lt;/span&gt;};&lt;/pre&gt;
&lt;pre style="background-color:white;font-family:Consolas, &amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:8pt;line-height:12pt;border-style:none;color:black;overflow:visible;padding:0px 0px 0px 0px;width:100%;margin:0em;"&gt;            var line2 = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; OrderLine {Amount = 2, ProductName = &lt;span style="color:#006080;"&gt;&amp;quot;Desktop PC A100&amp;quot;&lt;/span&gt;};&lt;/pre&gt;
&lt;pre style="background-color:#f4f4f4;font-family:Consolas, &amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:8pt;line-height:12pt;border-style:none;color:black;overflow:visible;padding:0px 0px 0px 0px;width:100%;margin:0em;"&gt;            _order = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; Order&lt;/pre&gt;
&lt;pre style="background-color:white;font-family:Consolas, &amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:8pt;line-height:12pt;border-style:none;color:black;overflow:visible;padding:0px 0px 0px 0px;width:100%;margin:0em;"&gt;                        {&lt;/pre&gt;
&lt;pre style="background-color:#f4f4f4;font-family:Consolas, &amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:8pt;line-height:12pt;border-style:none;color:black;overflow:visible;padding:0px 0px 0px 0px;width:100%;margin:0em;"&gt;                            OrderNumber = &lt;span style="color:#006080;"&gt;&amp;quot;o-100-001&amp;quot;&lt;/span&gt;,&lt;/pre&gt;
&lt;pre style="background-color:white;font-family:Consolas, &amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:8pt;line-height:12pt;border-style:none;color:black;overflow:visible;padding:0px 0px 0px 0px;width:100%;margin:0em;"&gt;                            OrderDate = DateTime.Today,&lt;/pre&gt;
&lt;pre style="background-color:#f4f4f4;font-family:Consolas, &amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:8pt;line-height:12pt;border-style:none;color:black;overflow:visible;padding:0px 0px 0px 0px;width:100%;margin:0em;"&gt;                            Customer = customer&lt;/pre&gt;
&lt;pre style="background-color:white;font-family:Consolas, &amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:8pt;line-height:12pt;border-style:none;color:black;overflow:visible;padding:0px 0px 0px 0px;width:100%;margin:0em;"&gt;                        };&lt;/pre&gt;
&lt;pre style="background-color:#f4f4f4;font-family:Consolas, &amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:8pt;line-height:12pt;border-style:none;color:black;overflow:visible;padding:0px 0px 0px 0px;width:100%;margin:0em;"&gt;            _order.OrderLines.Add(line1);&lt;/pre&gt;
&lt;pre style="background-color:white;font-family:Consolas, &amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:8pt;line-height:12pt;border-style:none;color:black;overflow:visible;padding:0px 0px 0px 0px;width:100%;margin:0em;"&gt;            _order.OrderLines.Add(line2);&lt;/pre&gt;
&lt;pre style="background-color:#f4f4f4;font-family:Consolas, &amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:8pt;line-height:12pt;border-style:none;color:black;overflow:visible;padding:0px 0px 0px 0px;width:100%;margin:0em;"&gt; &lt;/pre&gt;
&lt;pre style="background-color:white;font-family:Consolas, &amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:8pt;line-height:12pt;border-style:none;color:black;overflow:visible;padding:0px 0px 0px 0px;width:100%;margin:0em;"&gt;            &lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; (ISession session = SessionFactory.OpenSession())&lt;/pre&gt;
&lt;pre style="background-color:#f4f4f4;font-family:Consolas, &amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:8pt;line-height:12pt;border-style:none;color:black;overflow:visible;padding:0px 0px 0px 0px;width:100%;margin:0em;"&gt;                &lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; (ITransaction transaction = session.BeginTransaction())&lt;/pre&gt;
&lt;pre style="background-color:white;font-family:Consolas, &amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:8pt;line-height:12pt;border-style:none;color:black;overflow:visible;padding:0px 0px 0px 0px;width:100%;margin:0em;"&gt;                {&lt;/pre&gt;
&lt;pre style="background-color:#f4f4f4;font-family:Consolas, &amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:8pt;line-height:12pt;border-style:none;color:black;overflow:visible;padding:0px 0px 0px 0px;width:100%;margin:0em;"&gt;                    session.Save(customer);&lt;/pre&gt;
&lt;pre style="background-color:white;font-family:Consolas, &amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:8pt;line-height:12pt;border-style:none;color:black;overflow:visible;padding:0px 0px 0px 0px;width:100%;margin:0em;"&gt;                    session.Save(_order);&lt;/pre&gt;
&lt;pre style="background-color:#f4f4f4;font-family:Consolas, &amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:8pt;line-height:12pt;border-style:none;color:black;overflow:visible;padding:0px 0px 0px 0px;width:100%;margin:0em;"&gt;                    transaction.Commit();&lt;/pre&gt;
&lt;pre style="background-color:white;font-family:Consolas, &amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:8pt;line-height:12pt;border-style:none;color:black;overflow:visible;padding:0px 0px 0px 0px;width:100%;margin:0em;"&gt;                }&lt;/pre&gt;
&lt;pre style="background-color:#f4f4f4;font-family:Consolas, &amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:8pt;line-height:12pt;border-style:none;color:black;overflow:visible;padding:0px 0px 0px 0px;width:100%;margin:0em;"&gt;        }&lt;/pre&gt;
&lt;pre style="background-color:white;font-family:Consolas, &amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:8pt;line-height:12pt;border-style:none;color:black;overflow:visible;padding:0px 0px 0px 0px;width:100%;margin:0em;"&gt;    }&lt;/pre&gt;
&lt;pre style="background-color:#f4f4f4;font-family:Consolas, &amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:8pt;line-height:12pt;border-style:none;color:black;overflow:visible;padding:0px 0px 0px 0px;width:100%;margin:0em;"&gt;}&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;The&amp;nbsp;&lt;strong&gt;CreateInitialData&lt;/strong&gt;&amp;nbsp;method is run before each test. With this we guarantee that each test is side effects free.&lt;/p&gt;
&lt;h3&gt;Verifying the default behavior - Lazy Loading&lt;/h3&gt;
&lt;p&gt;When loading an order entity from database the default behavior of NHibernate is to lazy load all associated objects of the order entity. Let&amp;#39;s write a test to verify this. For the verification we use a utility class provided by NHibernate (NHibernateUtil) which can test whether an associated object or object collection is initialized (i.e. loaded) or not. The class can also force the initialization of an un-initialized relation.&lt;/p&gt;
&lt;div style="font-size:8pt;margin:20px 0px 10px;overflow:auto;width:97.5%;cursor:text;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;height:170px;background-color:#f4f4f4;max-height:200px;border:gray 1px solid;padding:4px;"&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;[Test]
&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; Customer_and_OrderLines_are_not_loaded_when_loading_Order()
{
    Order fromDb;
    &lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; (ISession session = SessionFactory.OpenSession())
        fromDb = session.Get&amp;lt;Order&amp;gt;(_order.Id);
 
    Assert.IsFalse(NHibernateUtil.IsInitialized(fromDb.Customer));
    Assert.IsFalse(NHibernateUtil.IsInitialized(fromDb.OrderLines));
}&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;The test succeeds and NHibernate generates SQL similar to this one&lt;/p&gt;
&lt;div style="font-size:8pt;margin:20px 0px 10px;overflow:auto;width:97.5%;cursor:text;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;height:109px;background-color:#f4f4f4;max-height:200px;border:gray 1px solid;padding:4px;"&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;&lt;span style="color:#0000ff;"&gt;SELECT&lt;/span&gt;    order0_.Id &lt;span style="color:#0000ff;"&gt;as&lt;/span&gt; Id0_0_, 
    order0_.OrderNumber &lt;span style="color:#0000ff;"&gt;as&lt;/span&gt; OrderNum2_0_0_, 
    order0_.OrderDate &lt;span style="color:#0000ff;"&gt;as&lt;/span&gt; OrderDate0_0_, 
    order0_.CustomerId &lt;span style="color:#0000ff;"&gt;as&lt;/span&gt; CustomerId0_0_ 
&lt;span style="color:#0000ff;"&gt;FROM&lt;/span&gt;    Orders order0_ 
&lt;span style="color:#0000ff;"&gt;WHERE&lt;/span&gt;    order0_.Id=&lt;span style="color:#006080;"&gt;&amp;#39;15bca5b3-2771-4bee-9923-85bda66318d8&amp;#39;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Now we have a problem: If we want to access the order line items (after the session has been closed) we get an exception. Since the session is closed NHibernate cannot lazily load the order line items for us. We can show this behavior with the following test method&lt;/p&gt;
&lt;div style="font-size:8pt;margin:20px 0px 10px;overflow:auto;width:97.5%;cursor:text;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;height:202px;background-color:#f4f4f4;max-height:200px;border:gray 1px solid;padding:4px;"&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;[Test]
[ExpectedException(&lt;span style="color:#0000ff;"&gt;typeof&lt;/span&gt;(LazyInitializationException))]
&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; Accessing_customer_of_order_after_session_is_closed_throws()
{
    Order fromDb;
    &lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; (ISession session = SessionFactory.OpenSession())
        fromDb = session.Get&amp;lt;Order&amp;gt;(_order.Id);
    
    &lt;span style="color:#008000;"&gt;// trying to access the Customer of the order, will throw exception&lt;/span&gt;
    &lt;span style="color:#008000;"&gt;// Note: at this point the session is already closed&lt;/span&gt;
    &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; name = fromDb.Customer.CompanyName;
}&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;Note: the above test&amp;nbsp;&lt;strong&gt;only&lt;/strong&gt;&amp;nbsp;succeeds if the method throws the expected exception of type&amp;nbsp;&lt;strong&gt;LazyInitializationException&lt;/strong&gt;. And this is just what we want to show!&lt;/p&gt;
&lt;p&gt;Another problem is the&amp;nbsp;&lt;strong&gt;n+1 select statements problem&lt;/strong&gt;. If we access the order line items after loading the order we generate a select statement for each line item we access. Thus if we have n line items and want to access them all we generate one select statement for the order itself and n select statements for all line items (result: n+1 select statements). This can make our data fetching rather slow and put a (unnecessary) burden onto our database.&lt;/p&gt;
&lt;p&gt;We can simulate this behavior with this test method&lt;/p&gt;
&lt;div style="font-size:8pt;margin:20px 0px 10px;overflow:auto;width:97.5%;cursor:text;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;height:233px;background-color:#f4f4f4;max-height:200px;border:gray 1px solid;padding:4px;"&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;[Test]
&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; Show_n_plus_1_select_behavior()
{
    &lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; (ISession session = SessionFactory.OpenSession())
    {
        var fromDb = session.Get&amp;lt;Order&amp;gt;(_order.Id);
        &lt;span style="color:#0000ff;"&gt;int&lt;/span&gt; sum = 0;
        &lt;span style="color:#0000ff;"&gt;foreach&lt;/span&gt; (var line &lt;span style="color:#0000ff;"&gt;in&lt;/span&gt; fromDb.OrderLines)
        {
            &lt;span style="color:#008000;"&gt;// just some dummy code to force loading of order line&lt;/span&gt;
            sum += line.Amount;
        } 
    }
}&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;NHibernate will generate SQL similar to the following&lt;/p&gt;
&lt;div style="font-size:8pt;margin:20px 0px 10px;overflow:auto;width:97.5%;cursor:text;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;height:235px;background-color:#f4f4f4;max-height:200px;border:gray 1px solid;padding:4px;"&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;&lt;span style="color:#0000ff;"&gt;SELECT&lt;/span&gt; order0_.Id &lt;span style="color:#0000ff;"&gt;as&lt;/span&gt; Id3_0_, 
       order0_.OrderNumber &lt;span style="color:#0000ff;"&gt;as&lt;/span&gt; OrderNum2_3_0_, 
       order0_.OrderDate &lt;span style="color:#0000ff;"&gt;as&lt;/span&gt; OrderDate3_0_, 
       order0_.Customer &lt;span style="color:#0000ff;"&gt;as&lt;/span&gt; Customer3_0_ 
&lt;span style="color:#0000ff;"&gt;FROM&lt;/span&gt;   Orders order0_ 
&lt;span style="color:#0000ff;"&gt;WHERE&lt;/span&gt;  order0_.Id=&lt;span style="color:#006080;"&gt;&amp;#39;5b2dbcb7-d0bf-4c53-86aa-8cd40cb5061a&amp;#39;&lt;/span&gt;
 
&lt;span style="color:#0000ff;"&gt;SELECT&lt;/span&gt; orderlines0_.OrderId &lt;span style="color:#0000ff;"&gt;as&lt;/span&gt; OrderId1_, 
       orderlines0_.Id &lt;span style="color:#0000ff;"&gt;as&lt;/span&gt; Id1_, 
       orderlines0_.Id &lt;span style="color:#0000ff;"&gt;as&lt;/span&gt; Id4_0_, 
       orderlines0_.Amount &lt;span style="color:#0000ff;"&gt;as&lt;/span&gt; Amount4_0_, 
       orderlines0_.ProductName &lt;span style="color:#0000ff;"&gt;as&lt;/span&gt; ProductN3_4_0_ 
&lt;span style="color:#0000ff;"&gt;FROM&lt;/span&gt;   OrderLine orderlines0_ 
&lt;span style="color:#0000ff;"&gt;WHERE&lt;/span&gt;  orderlines0_.OrderId=&lt;span style="color:#006080;"&gt;&amp;#39;5b2dbcb7-d0bf-4c53-86aa-8cd40cb5061a&amp;#39;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;This time we have been lucky! NHibernate has automatically generated an optimized query for us and has loaded the 2 order line items in one go. But this is not always the case! Imagine having a collection with several 100 items and you only need to access one or two of them. It would be a waste of resources to always load all items.&lt;/p&gt;
&lt;p&gt;But fortunately we have a solution for these kind of problems with NHibernate. It&amp;#39;s called eagerly loading.&lt;/p&gt;
&lt;h3&gt;Eagerly loading with the NHibernateUtil class&lt;/h3&gt;
&lt;p&gt;If you know you need have access to related objects of the order entity you can use the&amp;nbsp;&lt;strong&gt;NHibernateUtil&lt;/strong&gt;&amp;nbsp;class to initialize the related objects (that is: to fetch them from the database). Have a look at this test methods&lt;/p&gt;
&lt;div style="font-size:8pt;margin:20px 0px 10px;overflow:auto;width:97.5%;cursor:text;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;height:444px;background-color:#f4f4f4;max-height:444px;border:gray 1px solid;padding:4px;"&gt;
&lt;div style="font-size:8pt;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;border-style:none;padding:0px;"&gt;[Test]&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; Can_initialize_customer_of_order_with_nhibernate_util()&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;border-style:none;padding:0px;"&gt;{&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;    Order fromDb;&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;border-style:none;padding:0px;"&gt;    &lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; (ISession session = SessionFactory.OpenSession())&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;    {&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;border-style:none;padding:0px;"&gt;        fromDb = session.Get&amp;lt;Order&amp;gt;(_order.Id);&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;        NHibernateUtil.Initialize(fromDb.Customer);&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;border-style:none;padding:0px;"&gt;    }&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt; &lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;border-style:none;padding:0px;"&gt;    Assert.IsTrue(NHibernateUtil.IsInitialized(fromDb.Customer));&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;    Assert.IsFalse(NHibernateUtil.IsInitialized(fromDb.OrderLines));&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;border-style:none;padding:0px;"&gt;}&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt; &lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;border-style:none;padding:0px;"&gt;[Test]&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; Can_initialize_order_lines_of_order_with_nhibernate_util()&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;border-style:none;padding:0px;"&gt;{&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;    Order fromDb;&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;border-style:none;padding:0px;"&gt;    &lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; (ISession session = SessionFactory.OpenSession())&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;    {&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;border-style:none;padding:0px;"&gt;        fromDb = session.Get&amp;lt;Order&amp;gt;(_order.Id);&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;        NHibernateUtil.Initialize(fromDb.OrderLines);&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;border-style:none;padding:0px;"&gt;    }&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt; &lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;border-style:none;padding:0px;"&gt;    Assert.IsFalse(NHibernateUtil.IsInitialized(fromDb.Customer));&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;    Assert.IsTrue(NHibernateUtil.IsInitialized(fromDb.OrderLines));&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;border-style:none;padding:0px;"&gt;}&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;With this utility class you can initialize single objects as well as collection of objects. In each case NHibernate will send 2 select statements to the database. One to select the order and one to initialize the related object(s).&lt;/p&gt;
&lt;h3&gt;Eagerly loading with HQL&lt;/h3&gt;
&lt;p&gt;If you know that you want to load all order items of a given order then you can tell NHibernate to do so and eagerly load all order lines together with the order in one go. The following test method shows how you can formulate a HQL query which not only loads the order but also the associated customer and order lines.&lt;/p&gt;
&lt;div style="font-size:8pt;margin:20px 0px 10px;overflow:auto;width:97.5%;cursor:text;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;height:286px;background-color:#f4f4f4;max-height:286px;border:gray 1px solid;padding:4px;"&gt;
&lt;div style="font-size:8pt;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;border-style:none;padding:0px;"&gt;[Test]&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; Can_eagerly_load_order_aggregate_with_hql_query()&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;border-style:none;padding:0px;"&gt;{&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;    Order fromDb;&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;border-style:none;padding:0px;"&gt;    &lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; (ISession session = SessionFactory.OpenSession())&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;    {&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;border-style:none;padding:0px;"&gt;        &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; sql = &lt;span style="color:#006080;"&gt;&amp;quot;from Order o&amp;quot;&lt;/span&gt; +&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;                     &lt;span style="color:#006080;"&gt;&amp;quot; inner join fetch o.OrderLines&amp;quot;&lt;/span&gt; +&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;border-style:none;padding:0px;"&gt;                     &lt;span style="color:#006080;"&gt;&amp;quot; inner join fetch o.Customer&amp;quot;&lt;/span&gt; +&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;                     &lt;span style="color:#006080;"&gt;&amp;quot; where o.Id=:id&amp;quot;&lt;/span&gt;;&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;border-style:none;padding:0px;"&gt;        fromDb = session.CreateQuery(sql)&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;                        .SetGuid(&lt;span style="color:#006080;"&gt;&amp;quot;id&amp;quot;&lt;/span&gt;, _order.Id)&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;border-style:none;padding:0px;"&gt;                        .UniqueResult&amp;lt;Order&amp;gt;();&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;    }&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;border-style:none;padding:0px;"&gt;    Assert.IsTrue(NHibernateUtil.IsInitialized(fromDb.Customer));&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;    Assert.IsTrue(NHibernateUtil.IsInitialized(fromDb.OrderLines));&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;border-style:none;padding:0px;"&gt;}&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;The resulting sql generated by NHibernate is then similar to this one&lt;/p&gt;
&lt;div style="font-size:8pt;margin:20px 0px 10px;overflow:auto;width:97.5%;cursor:text;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;height:261px;background-color:#f4f4f4;max-height:260px;border:gray 1px solid;padding:4px;"&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;&lt;span style="color:#0000ff;"&gt;select&lt;/span&gt;      order0_.Id &lt;span style="color:#0000ff;"&gt;as&lt;/span&gt; Id0_0_, 
            orderlines1_.Id &lt;span style="color:#0000ff;"&gt;as&lt;/span&gt; Id1_1_, 
            customer2_.Id &lt;span style="color:#0000ff;"&gt;as&lt;/span&gt; Id2_2_, 
            order0_.OrderNumber &lt;span style="color:#0000ff;"&gt;as&lt;/span&gt; OrderNum2_0_0_, 
            order0_.OrderDate &lt;span style="color:#0000ff;"&gt;as&lt;/span&gt; OrderDate0_0_, 
            order0_.CustomerId &lt;span style="color:#0000ff;"&gt;as&lt;/span&gt; CustomerId0_0_, 
            orderlines1_.Amount &lt;span style="color:#0000ff;"&gt;as&lt;/span&gt; Amount1_1_, 
            orderlines1_.ProductName &lt;span style="color:#0000ff;"&gt;as&lt;/span&gt; ProductN3_1_1_, 
            customer2_.CompanyName &lt;span style="color:#0000ff;"&gt;as&lt;/span&gt; CompanyN2_2_2_, 
            orderlines1_.OrderId &lt;span style="color:#0000ff;"&gt;as&lt;/span&gt; OrderId0__, 
            orderlines1_.Id &lt;span style="color:#0000ff;"&gt;as&lt;/span&gt; Id0__ 
&lt;span style="color:#0000ff;"&gt;from&lt;/span&gt;        Orders order0_ 
&lt;span style="color:#0000ff;"&gt;inner&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;join&lt;/span&gt;  OrderLine orderlines1_ &lt;span style="color:#0000ff;"&gt;on&lt;/span&gt; order0_.Id=orderlines1_.OrderId 
&lt;span style="color:#0000ff;"&gt;inner&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;join&lt;/span&gt;  Customer customer2_ &lt;span style="color:#0000ff;"&gt;on&lt;/span&gt; order0_.CustomerId=customer2_.Id 
&lt;span style="color:#0000ff;"&gt;where&lt;/span&gt;       order0_.Id=&lt;span style="color:#006080;"&gt;&amp;#39;409ebd99-3206-459b-bfed-6df989284da9&amp;#39;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;NHibernate has created an SQL select statement which joins the 3 tables involved, namely&amp;nbsp;&lt;strong&gt;Orders&lt;/strong&gt;,&amp;nbsp;&lt;strong&gt;Customer&lt;/strong&gt;&amp;nbsp;and&lt;strong&gt;OrderLine&lt;/strong&gt;. The returned (flat) set of records is then used by NHibernate to build up the object tree with the order entity as a root.&lt;/p&gt;
&lt;h2&gt;Aggregates in the Domain&lt;/h2&gt;
&lt;p&gt;DDD defines the concept of&amp;nbsp;&lt;a href="http://domaindrivendesign.org/discussion/messageboardarchive/Aggregates.html"&gt;aggregates&lt;/a&gt;. A short definition of an aggregate is &amp;quot;&lt;em&gt;A cluster of associated objects that are treated as a unit for the purpose of data changes.&amp;quot;.&amp;nbsp;&lt;/em&gt;An aggregate always has a&amp;nbsp;&lt;em&gt;root&lt;/em&gt;.&lt;em&gt;&amp;nbsp;&lt;/em&gt;In this context we can define the following aggregate in our domain&lt;/p&gt;
&lt;p&gt;&lt;a href="/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/nhibernate/image_5F00_8.png"&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;&lt;img height="445" alt="image" src="/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/nhibernate/image_5F00_thumb_5F00_3.png" width="575" border="0" /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/nhibernate/image_5F00_8.png"&gt;&lt;span style="background: SpringGreen;"&gt;&lt;img border="0" width="575" src="/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/nhibernate/image_5F00_thumb_5F00_3.png" alt="image" height="445" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The order entity is the&amp;nbsp;&lt;em&gt;root&lt;/em&gt;&amp;nbsp;and the order lines belong to the aggregate (can be regarded as children of the&amp;nbsp;&lt;em&gt;root&lt;/em&gt;). When creating a new order or changing an existing one we only want to modify either the order itself or its order lines. We certainly do not want to change the customer entity because this would be a completely different use case and does not belong to the&amp;nbsp;&lt;em&gt;order management&lt;/em&gt;&amp;nbsp;use case.&lt;/p&gt;
&lt;p&gt;So, when dealing with aggregates we often want to load the complete aggregate in one go! This is the perfect example for using&amp;nbsp;&lt;strong&gt;eager loading&lt;/strong&gt;&amp;nbsp;techniques.&lt;/p&gt;
&lt;h2&gt;Summary&lt;/h2&gt;
&lt;p&gt;I have introduced the concept of lazy loading as provided by NHibernate. I have discussed the consequences and shown how to avoid negative side effects by using different techniques of so called eager loading.&lt;/p&gt;
&lt;p&gt;&lt;a href="/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/nhibernate/Blog-Signature-Gabriel_5F00_2.png"&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;&lt;img height="21" alt="Blog Signature Gabriel" src="/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/nhibernate/Blog-Signature-Gabriel_5F00_thumb.png" width="244" border="0" /&gt;&lt;/span&gt;&lt;/p&gt;</description></item><item><title>Lazy loading - eager loading</title><link>http://nhforge.org/wikis/howtonh/lazy-loading-eager-loading/revision/4.aspx</link><pubDate>Sun, 07 Sep 2008 04:33:15 GMT</pubDate><guid isPermaLink="false">45f813f2-f1c4-4eda-a619-288e3cadc793:50</guid><dc:creator>Fabio Maulo</dc:creator><comments>http://nhforge.org/wikis/howtonh/lazy-loading-eager-loading/comments.aspx</comments><description>Revision 4 posted to How to by Fabio Maulo on 07/09/2008 01:33:15 a.m.&lt;br /&gt;
&lt;h2&gt;Lazy loading - eager loading&lt;/h2&gt;
&lt;p&gt;&lt;span&gt;
&lt;p&gt;&lt;a href="http://www.nhforge.org/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/nhibernate/Blog-Signature-Gabriel_5F00_4.png"&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;&lt;img border="0" width="244" src="http://www.nhforge.org/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/nhibernate/Blog-Signature-Gabriel_5F00_thumb_5F00_1.png" alt="Blog Signature Gabriel" height="21" /&gt;&lt;/span&gt;&lt;p&gt;&lt;span&gt;
&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/nhibernate/Blog-Signature-Gabriel_5F00_4.png"&gt;&lt;span style="background: SpringGreen;"&gt;&lt;img height="21" alt="Blog Signature Gabriel" src="/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/nhibernate/Blog-Signature-Gabriel_5F00_thumb_5F00_1.png" width="244" border="0" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;In this article I want to discuss the&amp;nbsp;&lt;a href="http://martinfowler.com/eaaCatalog/lazyLoad.html"&gt;lazy loading&lt;/a&gt;&amp;nbsp;mechanism provided by NHibernate. It is recommended for maximum flexibility to define all relations in your domain as lazy loadable. This is the default behavior of NHibernate since version 1.2. But this can lead to some undesired effects if querying your data. Let&amp;#39;s discuss these effects and how to avoid them.&lt;/p&gt;
&lt;p&gt;In my previous posts I showed&amp;nbsp;&lt;a href="http://blogs.hibernatingrhinos.com/nhibernate/archive/2008/03/31/prepare-your-system-for-nhibernate.aspx"&gt;how to prepare your system for NHibernate&lt;/a&gt;&amp;nbsp;and&amp;nbsp;&lt;a href="/wikis/howtonh/your-first-nhibernate-based-application.aspx"&gt;how to implement a first NHibernate base application&lt;/a&gt;. This post is based on those two articles.&lt;/p&gt;
&lt;h2&gt;The Domain&lt;/h2&gt;
&lt;p&gt;Let&amp;#39;s first define a simple domain. It shows part of an order entry system. I keep this model as simple as possible (a real domain model would be more complex) but it contains all aspects we want to discuss in this post. Below is the class diagram of our model&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.nhforge.org/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/nhibernate/image_5F00_4.png"&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;&lt;img border="0" width="480" src="http://www.nhforge.org/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/nhibernate/image_5F00_thumb_5F00_1.png" alt="image" height="389" /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/nhibernate/image_5F00_4.png"&gt;&lt;span style="background: SpringGreen;"&gt;&lt;img height="389" alt="image" src="/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/nhibernate/image_5F00_thumb_5F00_1.png" width="480" border="0" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;We have an order entity which can be placed by a customer entity. Each order can have many order line entities. Each of the three entity types is uniquely identified by a property Id (surrogate key).&lt;/p&gt;
&lt;h2&gt;The Mapping Files&lt;/h2&gt;
&lt;p&gt;We have to write one mapping file per entity. It is recommended that you always have one mapping per file. Don&amp;#39;t forget to set the&amp;nbsp;&lt;strong&gt;Build Action&lt;/strong&gt;&amp;nbsp;of each mapping file to&amp;nbsp;&lt;strong&gt;Embedded Resource&lt;/strong&gt;. People often tend to forget it and the subsequent errors raised by NHibernate are not always obvious. Also do not forget to give the mapping files the correct name, that is *.&lt;strong&gt;hbm&lt;/strong&gt;.xml where * denotes the placeholder for the entity name.&lt;/p&gt;
&lt;p&gt;The mapping for the&amp;nbsp;&lt;strong&gt;Order&lt;/strong&gt;&amp;nbsp;entity might be implemented as follows&lt;/p&gt;
&lt;pre style="width:100%;"&gt;&lt;div&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;?&lt;/span&gt;&lt;span style="color:#FF00FF;"&gt;xml &lt;/span&gt; &lt;span class="attr"&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;version&lt;/span&gt;&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;=&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;version=&lt;/span&gt;&amp;quot;1.0&amp;quot; &lt;/span&gt; &lt;span class="attr"&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;encoding&lt;/span&gt;&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;=&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;encoding=&lt;/span&gt;&amp;quot;utf-8&amp;quot; &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;?&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;hibernate-mapping &lt;/span&gt;&lt;span style="color:#FF0000;"&gt;xmlns&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;=&amp;quot;urn:nhibernate-mapping-2.2&amp;quot;&lt;/span&gt;&lt;span style="color:#FF0000;"&gt;
                   assembly&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;=&amp;quot;LazyLoadEagerLoad&amp;quot;&lt;/span&gt;&lt;span style="color:#FF0000;"&gt;
                   namespace&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;=&amp;quot;LazyLoadEagerLoad.Domain&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
  
  &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;class &lt;/span&gt;&lt;span style="color:#FF0000;"&gt;name&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;=&amp;quot;Order&amp;quot;&lt;/span&gt;&lt;span style="color:#FF0000;"&gt; table&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;=&amp;quot;Orders&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
    &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;id &lt;/span&gt;&lt;span style="color:#FF0000;"&gt;name&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;=&amp;quot;Id&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
      &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;generator &lt;/span&gt;&lt;span style="color:#FF0000;"&gt;class&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;=&amp;quot;guid&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
    &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;id&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
    &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;property &lt;/span&gt;&lt;span style="color:#FF0000;"&gt;name&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;=&amp;quot;OrderNumber&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
    &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;property &lt;/span&gt;&lt;span style="color:#FF0000;"&gt;name&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;=&amp;quot;OrderDate&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
    
    &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;many-to-one &lt;/span&gt;&lt;span style="color:#FF0000;"&gt;name&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;=&amp;quot;Customer&amp;quot;&lt;/span&gt;&lt;span style="color:#FF0000;"&gt; &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
 
    &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;set &lt;/span&gt;&lt;span style="color:#FF0000;"&gt;name&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;=&amp;quot;OrderLines&amp;quot;&lt;/span&gt;&lt;span style="color:#FF0000;"&gt; cascade&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;=&amp;quot;all-delete-orphan&amp;quot;&lt;/span&gt;&lt;span style="color:#FF0000;"&gt; &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
      &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;key &lt;/span&gt;&lt;span style="color:#FF0000;"&gt;column&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;=&amp;quot;OrderId&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
      &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;one-to-many &lt;/span&gt;&lt;span style="color:#FF0000;"&gt;class&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;=&amp;quot;OrderLine&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
    &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;set&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
    
  &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;class&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
  
&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;hibernate-mapping&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;
&lt;p&gt;Analogous you can implement the mappings for the&amp;nbsp;&lt;strong&gt;Customer&lt;/strong&gt;&amp;nbsp;entity&lt;/p&gt;
&lt;div class="wlWriterEditableSmartContent" id="scid:F2210F5F-69EB-4d4c-AFF7-B8A050E9CC72:3acfe276-b736-4c58-88ae-7c262976b50f" style="padding-right:0px;display:inline;padding-left:0px;float:none;padding-bottom:0px;margin:0px;padding-top:0px;"&gt;
&lt;pre style="width:100%;"&gt;&lt;div&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;?&lt;/span&gt;&lt;span style="color:#FF00FF;"&gt;xml &lt;/span&gt; &lt;span class="attr"&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;version&lt;/span&gt;&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;=&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;version=&lt;/span&gt;&amp;quot;1.0&amp;quot; &lt;/span&gt; &lt;span class="attr"&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;encoding&lt;/span&gt;&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;=&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;encoding=&lt;/span&gt;&amp;quot;utf-8&amp;quot; &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;?&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt; 
&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;hibernate-mapping &lt;/span&gt;&lt;span style="color:#FF0000;"&gt;xmlns&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;=&amp;quot;urn:nhibernate-mapping-2.2&amp;quot;&lt;/span&gt;&lt;span style="color:#FF0000;"&gt;
                   assembly&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;=&amp;quot;LazyLoadEagerLoad&amp;quot;&lt;/span&gt;&lt;span style="color:#FF0000;"&gt;
                   namespace&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;=&amp;quot;LazyLoadEagerLoad.Domain&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
  
  &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;class &lt;/span&gt;&lt;span style="color:#FF0000;"&gt;name&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;=&amp;quot;Customer&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
    &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;id &lt;/span&gt;&lt;span style="color:#FF0000;"&gt;name&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;=&amp;quot;Id&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
      &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;generator &lt;/span&gt;&lt;span style="color:#FF0000;"&gt;class&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;=&amp;quot;guid&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
    &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;id&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
    &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;property &lt;/span&gt;&lt;span style="color:#FF0000;"&gt;name&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;=&amp;quot;CompanyName&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
  &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;class&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
 
&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;hibernate-mapping&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;and finally the mapping for the&amp;nbsp;&lt;strong&gt;OrderLine&lt;/strong&gt;&amp;nbsp;entity.&lt;/p&gt;
&lt;div class="wlWriterEditableSmartContent" id="scid:F2210F5F-69EB-4d4c-AFF7-B8A050E9CC72:23053d0d-5f88-44d1-8099-ff8406d62f4e" style="padding-right:0px;display:inline;padding-left:0px;float:none;padding-bottom:0px;margin:0px;padding-top:0px;"&gt;
&lt;pre style="width:100%;"&gt;&lt;div&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;?&lt;/span&gt;&lt;span style="color:#FF00FF;"&gt;xml &lt;/span&gt; &lt;span class="attr"&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;version&lt;/span&gt;&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;=&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;version=&lt;/span&gt;&amp;quot;1.0&amp;quot; &lt;/span&gt; &lt;span class="attr"&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;encoding&lt;/span&gt;&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;=&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;encoding=&lt;/span&gt;&amp;quot;utf-8&amp;quot; &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;?&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt; 
&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;hibernate-mapping &lt;/span&gt;&lt;span style="color:#FF0000;"&gt;xmlns&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;=&amp;quot;urn:nhibernate-mapping-2.2&amp;quot;&lt;/span&gt;&lt;span style="color:#FF0000;"&gt;
                   assembly&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;=&amp;quot;LazyLoadEagerLoad&amp;quot;&lt;/span&gt;&lt;span style="color:#FF0000;"&gt;
                   namespace&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;=&amp;quot;LazyLoadEagerLoad.Domain&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
 
  &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;class &lt;/span&gt;&lt;span style="color:#FF0000;"&gt;name&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;=&amp;quot;OrderLine&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
    &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;id &lt;/span&gt;&lt;span style="color:#FF0000;"&gt;name&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;=&amp;quot;Id&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
      &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;generator &lt;/span&gt;&lt;span style="color:#FF0000;"&gt;class&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;=&amp;quot;guid&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
    &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;id&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
    &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;property &lt;/span&gt;&lt;span style="color:#FF0000;"&gt;name&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;=&amp;quot;Amount&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
    &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;property &lt;/span&gt;&lt;span style="color:#FF0000;"&gt;name&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;=&amp;quot;ProductName&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
  &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;class&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
  
&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;hibernate-mapping&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;Testing the Mapping&lt;/h2&gt;
&lt;p&gt;To test the mapping we use the following test method&lt;/p&gt;
&lt;div style="font-size:8pt;margin:20px 0px 10px;overflow:auto;width:97.5%;cursor:text;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;max-height:370px;border:gray 1px solid;padding:4px;"&gt;
&lt;div style="font-size:8pt;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;border-style:none;padding:0px;"&gt;&lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; LazyLoadEagerLoad.Domain;&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;&lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; NHibernate.Cfg;&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;border-style:none;padding:0px;"&gt;&lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; NHibernate.Tool.hbm2ddl;&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;&lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; NUnit.Framework;&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;border-style:none;padding:0px;"&gt; &lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;&lt;span style="color:#0000ff;"&gt;namespace&lt;/span&gt; LazyLoadEagerLoad.Tests&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;border-style:none;padding:0px;"&gt;{&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;    [TestFixture]&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;border-style:none;padding:0px;"&gt;    &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;class&lt;/span&gt; GenerateSchema_Fixture&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;    {&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;border-style:none;padding:0px;"&gt;        [Test]&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;        &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; Can_generate_schema()&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;border-style:none;padding:0px;"&gt;        {&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;            var cfg = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; Configuration();&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;border-style:none;padding:0px;"&gt;            cfg.Configure();&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;            cfg.AddAssembly(&lt;span style="color:#0000ff;"&gt;typeof&lt;/span&gt;(Order).Assembly);&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;border-style:none;padding:0px;"&gt; &lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;            &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; SchemaExport(cfg).Execute(&lt;span style="color:#0000ff;"&gt;false&lt;/span&gt;, &lt;span style="color:#0000ff;"&gt;true&lt;/span&gt;, &lt;span style="color:#0000ff;"&gt;false&lt;/span&gt;, &lt;span style="color:#0000ff;"&gt;false&lt;/span&gt;);&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;border-style:none;padding:0px;"&gt;        }&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;    }&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;border-style:none;padding:0px;"&gt;}&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;
First we create a new instance of the NHibernate Configuration class and tell it to configure itself. Since we don&amp;#39;t provide any explicit configuration here in the code NHibernate looks out for an adequate configuration file. I have included such a file (called hibernate.cfg.xml) in my project. Please consult&amp;nbsp;&lt;a href="http://blogs.hibernatingrhinos.com/nhibernate/archive/2008/04/01/your-first-nhibernate-based-application.aspx"&gt;this&lt;/a&gt;&amp;nbsp;previous post for further details about the configuration file.
&lt;/p&gt;
&lt;h2&gt;Testing the Loading Behavior of NHibernate&lt;/h2&gt;
&lt;h3&gt;Defining a base class for our tests&lt;/h3&gt;
&lt;p&gt;To avoid repetitive task (&lt;a href="http://en.wikipedia.org/wiki/Don&amp;#39;t_repeat_yourself"&gt;DRY&lt;/a&gt;&amp;nbsp;principle) we implement the following base class.&lt;/p&gt;
&lt;div style="font-size:8pt;margin:20px 0px 10px;overflow:auto;width:97.5%;cursor:text;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;height:866px;background-color:#f4f4f4;max-height:866px;border:gray 1px solid;padding:4px;"&gt;
&lt;div style="font-size:8pt;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;border-style:none;padding:0px;"&gt;&lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; LazyLoadEagerLoad.Domain;&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;&lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; NHibernate;&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;border-style:none;padding:0px;"&gt;&lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; NHibernate.Cfg;&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;&lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; NHibernate.Tool.hbm2ddl;&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;border-style:none;padding:0px;"&gt;&lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; NUnit.Framework;&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt; &lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;border-style:none;padding:0px;"&gt;&lt;span style="color:#0000ff;"&gt;namespace&lt;/span&gt; LazyLoadEagerLoad.Tests&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;{&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;border-style:none;padding:0px;"&gt;    &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;class&lt;/span&gt; TestFixtureBase&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;    {&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;border-style:none;padding:0px;"&gt;        &lt;span style="color:#0000ff;"&gt;private&lt;/span&gt; Configuration _configuration;&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;        &lt;span style="color:#0000ff;"&gt;private&lt;/span&gt; ISessionFactory _sessionFactory;&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;border-style:none;padding:0px;"&gt; &lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;        &lt;span style="color:#0000ff;"&gt;protected&lt;/span&gt; ISessionFactory SessionFactory&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;border-style:none;padding:0px;"&gt;        {&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;            get { &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; _sessionFactory; }&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;border-style:none;padding:0px;"&gt;        }&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt; &lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;border-style:none;padding:0px;"&gt;        [TestFixtureSetUp]&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;        &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; TestFixtureSetUp()&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;border-style:none;padding:0px;"&gt;        {&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;            _configuration = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; Configuration();&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;border-style:none;padding:0px;"&gt;            _configuration.Configure();&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;            _configuration.AddAssembly(&lt;span style="color:#0000ff;"&gt;typeof&lt;/span&gt;(Customer).Assembly);&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;border-style:none;padding:0px;"&gt;            _sessionFactory = _configuration.BuildSessionFactory();&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;        }&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;border-style:none;padding:0px;"&gt; &lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;        [TestFixtureTearDown]&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;border-style:none;padding:0px;"&gt;        &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; TestFixtureTearDown()&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;        {&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;border-style:none;padding:0px;"&gt;            _sessionFactory.Close();&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;        }&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;border-style:none;padding:0px;"&gt; &lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;        [SetUp]&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;border-style:none;padding:0px;"&gt;        &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; SetupContext()&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;        {&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;border-style:none;padding:0px;"&gt;            &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; SchemaExport(_configuration).Execute(&lt;span style="color:#0000ff;"&gt;false&lt;/span&gt;, &lt;span style="color:#0000ff;"&gt;true&lt;/span&gt;, &lt;span style="color:#0000ff;"&gt;false&lt;/span&gt;, &lt;span style="color:#0000ff;"&gt;false&lt;/span&gt;);&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;            Before_each_test();&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;border-style:none;padding:0px;"&gt;        }&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt; &lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;border-style:none;padding:0px;"&gt;        [TearDown]&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;        &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; TearDownContext()&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;border-style:none;padding:0px;"&gt;        {&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;            After_each_test();&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;border-style:none;padding:0px;"&gt;        }&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt; &lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;border-style:none;padding:0px;"&gt;        &lt;span style="color:#0000ff;"&gt;protected&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;virtual&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; Before_each_test()&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;        { }&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;border-style:none;padding:0px;"&gt; &lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;        &lt;span style="color:#0000ff;"&gt;protected&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;virtual&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; After_each_test()&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;border-style:none;padding:0px;"&gt;        { }&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;    }&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;border-style:none;padding:0px;"&gt;}&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;When the test fixture is started, the base class configures NHibernate and creates a session factory (&lt;strong&gt;TestFixtureSetUp&lt;/strong&gt;). When the whole test fixture is ended the session factory is closed (&lt;strong&gt;TestFixtureTearDown&lt;/strong&gt;).&lt;/p&gt;
&lt;p&gt;Before each test in the fixture is run the database schema is (re-) created and the virtual&amp;nbsp;&lt;strong&gt;Before_each_test&lt;/strong&gt;&amp;nbsp;method is called. After each test in the fixture is finished the virtual&amp;nbsp;&lt;strong&gt;After_each_test&lt;/strong&gt;&amp;nbsp;method is called. The two virtual methods can (but must not necessarily) be overridden in a child class.&lt;/p&gt;
&lt;p&gt;All our test fixtures we implement will derive from this base class.&lt;/p&gt;
&lt;h3&gt;Filling the database with test data&lt;/h3&gt;
&lt;p&gt;To be able to test the loading behavior of NHibernate we need some test data in our database. We create this test data every time a test is run (just after the database schema is re-created). We add a new class&amp;nbsp;&lt;strong&gt;Order_Fixture&lt;/strong&gt;&amp;nbsp;to our test project and inherit from the&amp;nbsp;&lt;strong&gt;TestFixtureBase&lt;/strong&gt;&amp;nbsp;base class. Then we override the Before_each_test method and call a helper method which creates our initial data. We create just the absolute minimum of data we need (again --&amp;gt;DRY). That is: one customer placing one order with two order lines.&lt;/p&gt;
&lt;div style="background-color:#f4f4f4;font-family:Consolas, &amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:8pt;line-height:12pt;border:solid 1px gray;cursor:text;margin:20px 0px 10px 0px;max-height:749px;overflow:auto;padding:4px 4px 4px 4px;width:97.5%;"&gt;
&lt;div style="background-color:#f4f4f4;font-family:Consolas, &amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:8pt;line-height:12pt;border-style:none;color:black;overflow:visible;padding:0px 0px 0px 0px;width:100%;"&gt;
&lt;pre style="background-color:white;font-family:Consolas, &amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:8pt;line-height:12pt;border-style:none;color:black;overflow:visible;padding:0px 0px 0px 0px;width:100%;margin:0em;"&gt;&lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; System;&lt;/pre&gt;
&lt;pre style="background-color:#f4f4f4;font-family:Consolas, &amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:8pt;line-height:12pt;border-style:none;color:black;overflow:visible;padding:0px 0px 0px 0px;width:100%;margin:0em;"&gt;&lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; LazyLoadEagerLoad.Domain;&lt;/pre&gt;
&lt;pre style="background-color:white;font-family:Consolas, &amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:8pt;line-height:12pt;border-style:none;color:black;overflow:visible;padding:0px 0px 0px 0px;width:100%;margin:0em;"&gt;&lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; NHibernate;&lt;/pre&gt;
&lt;pre style="background-color:#f4f4f4;font-family:Consolas, &amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:8pt;line-height:12pt;border-style:none;color:black;overflow:visible;padding:0px 0px 0px 0px;width:100%;margin:0em;"&gt;&lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; NHibernate.Criterion;&lt;/pre&gt;
&lt;pre style="background-color:white;font-family:Consolas, &amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:8pt;line-height:12pt;border-style:none;color:black;overflow:visible;padding:0px 0px 0px 0px;width:100%;margin:0em;"&gt;&lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; NHibernate.SqlCommand;&lt;/pre&gt;
&lt;pre style="background-color:#f4f4f4;font-family:Consolas, &amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:8pt;line-height:12pt;border-style:none;color:black;overflow:visible;padding:0px 0px 0px 0px;width:100%;margin:0em;"&gt;&lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; NUnit.Framework;&lt;/pre&gt;
&lt;pre style="background-color:white;font-family:Consolas, &amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:8pt;line-height:12pt;border-style:none;color:black;overflow:visible;padding:0px 0px 0px 0px;width:100%;margin:0em;"&gt;&lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; Order=LazyLoadEagerLoad.Domain.Order;&lt;/pre&gt;
&lt;pre style="background-color:#f4f4f4;font-family:Consolas, &amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:8pt;line-height:12pt;border-style:none;color:black;overflow:visible;padding:0px 0px 0px 0px;width:100%;margin:0em;"&gt; &lt;/pre&gt;
&lt;pre style="background-color:white;font-family:Consolas, &amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:8pt;line-height:12pt;border-style:none;color:black;overflow:visible;padding:0px 0px 0px 0px;width:100%;margin:0em;"&gt;&lt;span style="color:#0000ff;"&gt;namespace&lt;/span&gt; LazyLoadEagerLoad.Tests&lt;/pre&gt;
&lt;pre style="background-color:#f4f4f4;font-family:Consolas, &amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:8pt;line-height:12pt;border-style:none;color:black;overflow:visible;padding:0px 0px 0px 0px;width:100%;margin:0em;"&gt;{&lt;/pre&gt;
&lt;pre style="background-color:white;font-family:Consolas, &amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:8pt;line-height:12pt;border-style:none;color:black;overflow:visible;padding:0px 0px 0px 0px;width:100%;margin:0em;"&gt;    [TestFixture]&lt;/pre&gt;
&lt;pre style="background-color:#f4f4f4;font-family:Consolas, &amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:8pt;line-height:12pt;border-style:none;color:black;overflow:visible;padding:0px 0px 0px 0px;width:100%;margin:0em;"&gt;    &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;class&lt;/span&gt; Order_Fixture : TestFixtureBase&lt;/pre&gt;
&lt;pre style="background-color:white;font-family:Consolas, &amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:8pt;line-height:12pt;border-style:none;color:black;overflow:visible;padding:0px 0px 0px 0px;width:100%;margin:0em;"&gt;    {&lt;/pre&gt;
&lt;pre style="background-color:#f4f4f4;font-family:Consolas, &amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:8pt;line-height:12pt;border-style:none;color:black;overflow:visible;padding:0px 0px 0px 0px;width:100%;margin:0em;"&gt;        &lt;span style="color:#0000ff;"&gt;private&lt;/span&gt; Order _order;&lt;/pre&gt;
&lt;pre style="background-color:white;font-family:Consolas, &amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:8pt;line-height:12pt;border-style:none;color:black;overflow:visible;padding:0px 0px 0px 0px;width:100%;margin:0em;"&gt; &lt;/pre&gt;
&lt;pre style="background-color:#f4f4f4;font-family:Consolas, &amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:8pt;line-height:12pt;border-style:none;color:black;overflow:visible;padding:0px 0px 0px 0px;width:100%;margin:0em;"&gt;        &lt;span style="color:#0000ff;"&gt;protected&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;override&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; Before_each_test()&lt;/pre&gt;
&lt;pre style="background-color:white;font-family:Consolas, &amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:8pt;line-height:12pt;border-style:none;color:black;overflow:visible;padding:0px 0px 0px 0px;width:100%;margin:0em;"&gt;        {&lt;/pre&gt;
&lt;pre style="background-color:#f4f4f4;font-family:Consolas, &amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:8pt;line-height:12pt;border-style:none;color:black;overflow:visible;padding:0px 0px 0px 0px;width:100%;margin:0em;"&gt;            &lt;span style="color:#0000ff;"&gt;base&lt;/span&gt;.Before_each_test();&lt;/pre&gt;
&lt;pre style="background-color:white;font-family:Consolas, &amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:8pt;line-height:12pt;border-style:none;color:black;overflow:visible;padding:0px 0px 0px 0px;width:100%;margin:0em;"&gt;            CreateInitialData();&lt;/pre&gt;
&lt;pre style="background-color:#f4f4f4;font-family:Consolas, &amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:8pt;line-height:12pt;border-style:none;color:black;overflow:visible;padding:0px 0px 0px 0px;width:100%;margin:0em;"&gt;        }&lt;/pre&gt;
&lt;pre style="background-color:white;font-family:Consolas, &amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:8pt;line-height:12pt;border-style:none;color:black;overflow:visible;padding:0px 0px 0px 0px;width:100%;margin:0em;"&gt; &lt;/pre&gt;
&lt;pre style="background-color:#f4f4f4;font-family:Consolas, &amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:8pt;line-height:12pt;border-style:none;color:black;overflow:visible;padding:0px 0px 0px 0px;width:100%;margin:0em;"&gt;        &lt;span style="color:#0000ff;"&gt;private&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; CreateInitialData()&lt;/pre&gt;
&lt;pre style="background-color:white;font-family:Consolas, &amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:8pt;line-height:12pt;border-style:none;color:black;overflow:visible;padding:0px 0px 0px 0px;width:100%;margin:0em;"&gt;        {&lt;/pre&gt;
&lt;pre style="background-color:#f4f4f4;font-family:Consolas, &amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:8pt;line-height:12pt;border-style:none;color:black;overflow:visible;padding:0px 0px 0px 0px;width:100%;margin:0em;"&gt;            &lt;span style="color:#008000;"&gt;// create a single customer and an order with two order lines for this customer&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="background-color:white;font-family:Consolas, &amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:8pt;line-height:12pt;border-style:none;color:black;overflow:visible;padding:0px 0px 0px 0px;width:100%;margin:0em;"&gt;            var customer = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; Customer {CompanyName = &lt;span style="color:#006080;"&gt;&amp;quot;IBM&amp;quot;&lt;/span&gt;};&lt;/pre&gt;
&lt;pre style="background-color:#f4f4f4;font-family:Consolas, &amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:8pt;line-height:12pt;border-style:none;color:black;overflow:visible;padding:0px 0px 0px 0px;width:100%;margin:0em;"&gt;            var line1 = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; OrderLine {Amount = 5, ProductName = &lt;span style="color:#006080;"&gt;&amp;quot;Laptop XYZ&amp;quot;&lt;/span&gt;};&lt;/pre&gt;
&lt;pre style="background-color:white;font-family:Consolas, &amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:8pt;line-height:12pt;border-style:none;color:black;overflow:visible;padding:0px 0px 0px 0px;width:100%;margin:0em;"&gt;            var line2 = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; OrderLine {Amount = 2, ProductName = &lt;span style="color:#006080;"&gt;&amp;quot;Desktop PC A100&amp;quot;&lt;/span&gt;};&lt;/pre&gt;
&lt;pre style="background-color:#f4f4f4;font-family:Consolas, &amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:8pt;line-height:12pt;border-style:none;color:black;overflow:visible;padding:0px 0px 0px 0px;width:100%;margin:0em;"&gt;            _order = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; Order&lt;/pre&gt;
&lt;pre style="background-color:white;font-family:Consolas, &amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:8pt;line-height:12pt;border-style:none;color:black;overflow:visible;padding:0px 0px 0px 0px;width:100%;margin:0em;"&gt;                        {&lt;/pre&gt;
&lt;pre style="background-color:#f4f4f4;font-family:Consolas, &amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:8pt;line-height:12pt;border-style:none;color:black;overflow:visible;padding:0px 0px 0px 0px;width:100%;margin:0em;"&gt;                            OrderNumber = &lt;span style="color:#006080;"&gt;&amp;quot;o-100-001&amp;quot;&lt;/span&gt;,&lt;/pre&gt;
&lt;pre style="background-color:white;font-family:Consolas, &amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:8pt;line-height:12pt;border-style:none;color:black;overflow:visible;padding:0px 0px 0px 0px;width:100%;margin:0em;"&gt;                            OrderDate = DateTime.Today,&lt;/pre&gt;
&lt;pre style="background-color:#f4f4f4;font-family:Consolas, &amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:8pt;line-height:12pt;border-style:none;color:black;overflow:visible;padding:0px 0px 0px 0px;width:100%;margin:0em;"&gt;                            Customer = customer&lt;/pre&gt;
&lt;pre style="background-color:white;font-family:Consolas, &amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:8pt;line-height:12pt;border-style:none;color:black;overflow:visible;padding:0px 0px 0px 0px;width:100%;margin:0em;"&gt;                        };&lt;/pre&gt;
&lt;pre style="background-color:#f4f4f4;font-family:Consolas, &amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:8pt;line-height:12pt;border-style:none;color:black;overflow:visible;padding:0px 0px 0px 0px;width:100%;margin:0em;"&gt;            _order.OrderLines.Add(line1);&lt;/pre&gt;
&lt;pre style="background-color:white;font-family:Consolas, &amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:8pt;line-height:12pt;border-style:none;color:black;overflow:visible;padding:0px 0px 0px 0px;width:100%;margin:0em;"&gt;            _order.OrderLines.Add(line2);&lt;/pre&gt;
&lt;pre style="background-color:#f4f4f4;font-family:Consolas, &amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:8pt;line-height:12pt;border-style:none;color:black;overflow:visible;padding:0px 0px 0px 0px;width:100%;margin:0em;"&gt; &lt;/pre&gt;
&lt;pre style="background-color:white;font-family:Consolas, &amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:8pt;line-height:12pt;border-style:none;color:black;overflow:visible;padding:0px 0px 0px 0px;width:100%;margin:0em;"&gt;            &lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; (ISession session = SessionFactory.OpenSession())&lt;/pre&gt;
&lt;pre style="background-color:#f4f4f4;font-family:Consolas, &amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:8pt;line-height:12pt;border-style:none;color:black;overflow:visible;padding:0px 0px 0px 0px;width:100%;margin:0em;"&gt;                &lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; (ITransaction transaction = session.BeginTransaction())&lt;/pre&gt;
&lt;pre style="background-color:white;font-family:Consolas, &amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:8pt;line-height:12pt;border-style:none;color:black;overflow:visible;padding:0px 0px 0px 0px;width:100%;margin:0em;"&gt;                {&lt;/pre&gt;
&lt;pre style="background-color:#f4f4f4;font-family:Consolas, &amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:8pt;line-height:12pt;border-style:none;color:black;overflow:visible;padding:0px 0px 0px 0px;width:100%;margin:0em;"&gt;                    session.Save(customer);&lt;/pre&gt;
&lt;pre style="background-color:white;font-family:Consolas, &amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:8pt;line-height:12pt;border-style:none;color:black;overflow:visible;padding:0px 0px 0px 0px;width:100%;margin:0em;"&gt;                    session.Save(_order);&lt;/pre&gt;
&lt;pre style="background-color:#f4f4f4;font-family:Consolas, &amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:8pt;line-height:12pt;border-style:none;color:black;overflow:visible;padding:0px 0px 0px 0px;width:100%;margin:0em;"&gt;                    transaction.Commit();&lt;/pre&gt;
&lt;pre style="background-color:white;font-family:Consolas, &amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:8pt;line-height:12pt;border-style:none;color:black;overflow:visible;padding:0px 0px 0px 0px;width:100%;margin:0em;"&gt;                }&lt;/pre&gt;
&lt;pre style="background-color:#f4f4f4;font-family:Consolas, &amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:8pt;line-height:12pt;border-style:none;color:black;overflow:visible;padding:0px 0px 0px 0px;width:100%;margin:0em;"&gt;        }&lt;/pre&gt;
&lt;pre style="background-color:white;font-family:Consolas, &amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:8pt;line-height:12pt;border-style:none;color:black;overflow:visible;padding:0px 0px 0px 0px;width:100%;margin:0em;"&gt;    }&lt;/pre&gt;
&lt;pre style="background-color:#f4f4f4;font-family:Consolas, &amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:8pt;line-height:12pt;border-style:none;color:black;overflow:visible;padding:0px 0px 0px 0px;width:100%;margin:0em;"&gt;}&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;The&amp;nbsp;&lt;strong&gt;CreateInitialData&lt;/strong&gt;&amp;nbsp;method is run before each test. With this we guarantee that each test is side effects free.&lt;/p&gt;
&lt;h3&gt;Verifying the default behavior - Lazy Loading&lt;/h3&gt;
&lt;p&gt;When loading an order entity from database the default behavior of NHibernate is to lazy load all associated objects of the order entity. Let&amp;#39;s write a test to verify this. For the verification we use a utility class provided by NHibernate (NHibernateUtil) which can test whether an associated object or object collection is initialized (i.e. loaded) or not. The class can also force the initialization of an un-initialized relation.&lt;/p&gt;
&lt;div style="font-size:8pt;margin:20px 0px 10px;overflow:auto;width:97.5%;cursor:text;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;height:170px;background-color:#f4f4f4;max-height:200px;border:gray 1px solid;padding:4px;"&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;[Test]
&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; Customer_and_OrderLines_are_not_loaded_when_loading_Order()
{
    Order fromDb;
    &lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; (ISession session = SessionFactory.OpenSession())
        fromDb = session.Get&amp;lt;Order&amp;gt;(_order.Id);
 
    Assert.IsFalse(NHibernateUtil.IsInitialized(fromDb.Customer));
    Assert.IsFalse(NHibernateUtil.IsInitialized(fromDb.OrderLines));
}&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;The test succeeds and NHibernate generates SQL similar to this one&lt;/p&gt;
&lt;div style="font-size:8pt;margin:20px 0px 10px;overflow:auto;width:97.5%;cursor:text;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;height:109px;background-color:#f4f4f4;max-height:200px;border:gray 1px solid;padding:4px;"&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;&lt;span style="color:#0000ff;"&gt;SELECT&lt;/span&gt;    order0_.Id &lt;span style="color:#0000ff;"&gt;as&lt;/span&gt; Id0_0_, 
    order0_.OrderNumber &lt;span style="color:#0000ff;"&gt;as&lt;/span&gt; OrderNum2_0_0_, 
    order0_.OrderDate &lt;span style="color:#0000ff;"&gt;as&lt;/span&gt; OrderDate0_0_, 
    order0_.CustomerId &lt;span style="color:#0000ff;"&gt;as&lt;/span&gt; CustomerId0_0_ 
&lt;span style="color:#0000ff;"&gt;FROM&lt;/span&gt;    Orders order0_ 
&lt;span style="color:#0000ff;"&gt;WHERE&lt;/span&gt;    order0_.Id=&lt;span style="color:#006080;"&gt;&amp;#39;15bca5b3-2771-4bee-9923-85bda66318d8&amp;#39;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Now we have a problem: If we want to access the order line items (after the session has been closed) we get an exception. Since the session is closed NHibernate cannot lazily load the order line items for us. We can show this behavior with the following test method&lt;/p&gt;
&lt;div style="font-size:8pt;margin:20px 0px 10px;overflow:auto;width:97.5%;cursor:text;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;height:202px;background-color:#f4f4f4;max-height:200px;border:gray 1px solid;padding:4px;"&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;[Test]
[ExpectedException(&lt;span style="color:#0000ff;"&gt;typeof&lt;/span&gt;(LazyInitializationException))]
&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; Accessing_customer_of_order_after_session_is_closed_throws()
{
    Order fromDb;
    &lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; (ISession session = SessionFactory.OpenSession())
        fromDb = session.Get&amp;lt;Order&amp;gt;(_order.Id);
    
    &lt;span style="color:#008000;"&gt;// trying to access the Customer of the order, will throw exception&lt;/span&gt;
    &lt;span style="color:#008000;"&gt;// Note: at this point the session is already closed&lt;/span&gt;
    &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; name = fromDb.Customer.CompanyName;
}&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;Note: the above test&amp;nbsp;&lt;strong&gt;only&lt;/strong&gt;&amp;nbsp;succeeds if the method throws the expected exception of type&amp;nbsp;&lt;strong&gt;LazyInitializationException&lt;/strong&gt;. And this is just what we want to show!&lt;/p&gt;
&lt;p&gt;Another problem is the&amp;nbsp;&lt;strong&gt;n+1 select statements problem&lt;/strong&gt;. If we access the order line items after loading the order we generate a select statement for each line item we access. Thus if we have n line items and want to access them all we generate one select statement for the order itself and n select statements for all line items (result: n+1 select statements). This can make our data fetching rather slow and put a (unnecessary) burden onto our database.&lt;/p&gt;
&lt;p&gt;We can simulate this behavior with this test method&lt;/p&gt;
&lt;div style="font-size:8pt;margin:20px 0px 10px;overflow:auto;width:97.5%;cursor:text;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;height:233px;background-color:#f4f4f4;max-height:200px;border:gray 1px solid;padding:4px;"&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;[Test]
&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; Show_n_plus_1_select_behavior()
{
    &lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; (ISession session = SessionFactory.OpenSession())
    {
        var fromDb = session.Get&amp;lt;Order&amp;gt;(_order.Id);
        &lt;span style="color:#0000ff;"&gt;int&lt;/span&gt; sum = 0;
        &lt;span style="color:#0000ff;"&gt;foreach&lt;/span&gt; (var line &lt;span style="color:#0000ff;"&gt;in&lt;/span&gt; fromDb.OrderLines)
        {
            &lt;span style="color:#008000;"&gt;// just some dummy code to force loading of order line&lt;/span&gt;
            sum += line.Amount;
        } 
    }
}&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;NHibernate will generate SQL similar to the following&lt;/p&gt;
&lt;div style="font-size:8pt;margin:20px 0px 10px;overflow:auto;width:97.5%;cursor:text;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;height:235px;background-color:#f4f4f4;max-height:200px;border:gray 1px solid;padding:4px;"&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;&lt;span style="color:#0000ff;"&gt;SELECT&lt;/span&gt; order0_.Id &lt;span style="color:#0000ff;"&gt;as&lt;/span&gt; Id3_0_, 
       order0_.OrderNumber &lt;span style="color:#0000ff;"&gt;as&lt;/span&gt; OrderNum2_3_0_, 
       order0_.OrderDate &lt;span style="color:#0000ff;"&gt;as&lt;/span&gt; OrderDate3_0_, 
       order0_.Customer &lt;span style="color:#0000ff;"&gt;as&lt;/span&gt; Customer3_0_ 
&lt;span style="color:#0000ff;"&gt;FROM&lt;/span&gt;   Orders order0_ 
&lt;span style="color:#0000ff;"&gt;WHERE&lt;/span&gt;  order0_.Id=&lt;span style="color:#006080;"&gt;&amp;#39;5b2dbcb7-d0bf-4c53-86aa-8cd40cb5061a&amp;#39;&lt;/span&gt;
 
&lt;span style="color:#0000ff;"&gt;SELECT&lt;/span&gt; orderlines0_.OrderId &lt;span style="color:#0000ff;"&gt;as&lt;/span&gt; OrderId1_, 
       orderlines0_.Id &lt;span style="color:#0000ff;"&gt;as&lt;/span&gt; Id1_, 
       orderlines0_.Id &lt;span style="color:#0000ff;"&gt;as&lt;/span&gt; Id4_0_, 
       orderlines0_.Amount &lt;span style="color:#0000ff;"&gt;as&lt;/span&gt; Amount4_0_, 
       orderlines0_.ProductName &lt;span style="color:#0000ff;"&gt;as&lt;/span&gt; ProductN3_4_0_ 
&lt;span style="color:#0000ff;"&gt;FROM&lt;/span&gt;   OrderLine orderlines0_ 
&lt;span style="color:#0000ff;"&gt;WHERE&lt;/span&gt;  orderlines0_.OrderId=&lt;span style="color:#006080;"&gt;&amp;#39;5b2dbcb7-d0bf-4c53-86aa-8cd40cb5061a&amp;#39;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;This time we have been lucky! NHibernate has automatically generated an optimized query for us and has loaded the 2 order line items in one go. But this is not always the case! Imagine having a collection with several 100 items and you only need to access one or two of them. It would be a waste of resources to always load all items.&lt;/p&gt;
&lt;p&gt;But fortunately we have a solution for these kind of problems with NHibernate. It&amp;#39;s called eagerly loading.&lt;/p&gt;
&lt;h3&gt;Eagerly loading with the NHibernateUtil class&lt;/h3&gt;
&lt;p&gt;If you know you need have access to related objects of the order entity you can use the&amp;nbsp;&lt;strong&gt;NHibernateUtil&lt;/strong&gt;&amp;nbsp;class to initialize the related objects (that is: to fetch them from the database). Have a look at this test methods&lt;/p&gt;
&lt;div style="font-size:8pt;margin:20px 0px 10px;overflow:auto;width:97.5%;cursor:text;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;height:444px;background-color:#f4f4f4;max-height:444px;border:gray 1px solid;padding:4px;"&gt;
&lt;div style="font-size:8pt;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;border-style:none;padding:0px;"&gt;[Test]&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; Can_initialize_customer_of_order_with_nhibernate_util()&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;border-style:none;padding:0px;"&gt;{&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;    Order fromDb;&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;border-style:none;padding:0px;"&gt;    &lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; (ISession session = SessionFactory.OpenSession())&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;    {&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;border-style:none;padding:0px;"&gt;        fromDb = session.Get&amp;lt;Order&amp;gt;(_order.Id);&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;        NHibernateUtil.Initialize(fromDb.Customer);&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;border-style:none;padding:0px;"&gt;    }&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt; &lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;border-style:none;padding:0px;"&gt;    Assert.IsTrue(NHibernateUtil.IsInitialized(fromDb.Customer));&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;    Assert.IsFalse(NHibernateUtil.IsInitialized(fromDb.OrderLines));&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;border-style:none;padding:0px;"&gt;}&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt; &lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;border-style:none;padding:0px;"&gt;[Test]&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; Can_initialize_order_lines_of_order_with_nhibernate_util()&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;border-style:none;padding:0px;"&gt;{&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;    Order fromDb;&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;border-style:none;padding:0px;"&gt;    &lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; (ISession session = SessionFactory.OpenSession())&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;    {&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;border-style:none;padding:0px;"&gt;        fromDb = session.Get&amp;lt;Order&amp;gt;(_order.Id);&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;        NHibernateUtil.Initialize(fromDb.OrderLines);&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;border-style:none;padding:0px;"&gt;    }&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt; &lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;border-style:none;padding:0px;"&gt;    Assert.IsFalse(NHibernateUtil.IsInitialized(fromDb.Customer));&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;    Assert.IsTrue(NHibernateUtil.IsInitialized(fromDb.OrderLines));&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;border-style:none;padding:0px;"&gt;}&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;With this utility class you can initialize single objects as well as collection of objects. In each case NHibernate will send 2 select statements to the database. One to select the order and one to initialize the related object(s).&lt;/p&gt;
&lt;h3&gt;Eagerly loading with HQL&lt;/h3&gt;
&lt;p&gt;If you know that you want to load all order items of a given order then you can tell NHibernate to do so and eagerly load all order lines together with the order in one go. The following test method shows how you can formulate a HQL query which not only loads the order but also the associated customer and order lines.&lt;/p&gt;
&lt;div style="font-size:8pt;margin:20px 0px 10px;overflow:auto;width:97.5%;cursor:text;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;height:286px;background-color:#f4f4f4;max-height:286px;border:gray 1px solid;padding:4px;"&gt;
&lt;div style="font-size:8pt;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;border-style:none;padding:0px;"&gt;[Test]&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; Can_eagerly_load_order_aggregate_with_hql_query()&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;border-style:none;padding:0px;"&gt;{&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;    Order fromDb;&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;border-style:none;padding:0px;"&gt;    &lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; (ISession session = SessionFactory.OpenSession())&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;    {&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;border-style:none;padding:0px;"&gt;        &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; sql = &lt;span style="color:#006080;"&gt;&amp;quot;from Order o&amp;quot;&lt;/span&gt; +&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;                     &lt;span style="color:#006080;"&gt;&amp;quot; inner join fetch o.OrderLines&amp;quot;&lt;/span&gt; +&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;border-style:none;padding:0px;"&gt;                     &lt;span style="color:#006080;"&gt;&amp;quot; inner join fetch o.Customer&amp;quot;&lt;/span&gt; +&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;                     &lt;span style="color:#006080;"&gt;&amp;quot; where o.Id=:id&amp;quot;&lt;/span&gt;;&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;border-style:none;padding:0px;"&gt;        fromDb = session.CreateQuery(sql)&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;                        .SetGuid(&lt;span style="color:#006080;"&gt;&amp;quot;id&amp;quot;&lt;/span&gt;, _order.Id)&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;border-style:none;padding:0px;"&gt;                        .UniqueResult&amp;lt;Order&amp;gt;();&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;    }&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;border-style:none;padding:0px;"&gt;    Assert.IsTrue(NHibernateUtil.IsInitialized(fromDb.Customer));&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;    Assert.IsTrue(NHibernateUtil.IsInitialized(fromDb.OrderLines));&lt;/pre&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;border-style:none;padding:0px;"&gt;}&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;The resulting sql generated by NHibernate is then similar to this one&lt;/p&gt;
&lt;div style="font-size:8pt;margin:20px 0px 10px;overflow:auto;width:97.5%;cursor:text;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;height:261px;background-color:#f4f4f4;max-height:260px;border:gray 1px solid;padding:4px;"&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;border-style:none;padding:0px;"&gt;&lt;span style="color:#0000ff;"&gt;select&lt;/span&gt;      order0_.Id &lt;span style="color:#0000ff;"&gt;as&lt;/span&gt; Id0_0_, 
            orderlines1_.Id &lt;span style="color:#0000ff;"&gt;as&lt;/span&gt; Id1_1_, 
            customer2_.Id &lt;span style="color:#0000ff;"&gt;as&lt;/span&gt; Id2_2_, 
            order0_.OrderNumber &lt;span style="color:#0000ff;"&gt;as&lt;/span&gt; OrderNum2_0_0_, 
            order0_.OrderDate &lt;span style="color:#0000ff;"&gt;as&lt;/span&gt; OrderDate0_0_, 
            order0_.CustomerId &lt;span style="color:#0000ff;"&gt;as&lt;/span&gt; CustomerId0_0_, 
            orderlines1_.Amount &lt;span style="color:#0000ff;"&gt;as&lt;/span&gt; Amount1_1_, 
            orderlines1_.ProductName &lt;span style="color:#0000ff;"&gt;as&lt;/span&gt; ProductN3_1_1_, 
            customer2_.CompanyName &lt;span style="color:#0000ff;"&gt;as&lt;/span&gt; CompanyN2_2_2_, 
            orderlines1_.OrderId &lt;span style="color:#0000ff;"&gt;as&lt;/span&gt; OrderId0__, 
            orderlines1_.Id &lt;span style="color:#0000ff;"&gt;as&lt;/span&gt; Id0__ 
&lt;span style="color:#0000ff;"&gt;from&lt;/span&gt;        Orders order0_ 
&lt;span style="color:#0000ff;"&gt;inner&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;join&lt;/span&gt;  OrderLine orderlines1_ &lt;span style="color:#0000ff;"&gt;on&lt;/span&gt; order0_.Id=orderlines1_.OrderId 
&lt;span style="color:#0000ff;"&gt;inner&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;join&lt;/span&gt;  Customer customer2_ &lt;span style="color:#0000ff;"&gt;on&lt;/span&gt; order0_.CustomerId=customer2_.Id 
&lt;span style="color:#0000ff;"&gt;where&lt;/span&gt;       order0_.Id=&lt;span style="color:#006080;"&gt;&amp;#39;409ebd99-3206-459b-bfed-6df989284da9&amp;#39;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;NHibernate has created an SQL select statement which joins the 3 tables involved, namely&amp;nbsp;&lt;strong&gt;Orders&lt;/strong&gt;,&amp;nbsp;&lt;strong&gt;Customer&lt;/strong&gt;&amp;nbsp;and&lt;strong&gt;OrderLine&lt;/strong&gt;. The returned (flat) set of records is then used by NHibernate to build up the object tree with the order entity as a root.&lt;/p&gt;
&lt;h2&gt;Aggregates in the Domain&lt;/h2&gt;
&lt;p&gt;DDD defines the concept of&amp;nbsp;&lt;a href="http://domaindrivendesign.org/discussion/messageboardarchive/Aggregates.html"&gt;aggregates&lt;/a&gt;. A short definition of an aggregate is &amp;quot;&lt;em&gt;A cluster of associated objects that are treated as a unit for the purpose of data changes.&amp;quot;.&amp;nbsp;&lt;/em&gt;An aggregate always has a&amp;nbsp;&lt;em&gt;root&lt;/em&gt;.&lt;em&gt;&amp;nbsp;&lt;/em&gt;In this context we can define the following aggregate in our domain&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.nhforge.org/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/nhibernate/image_5F00_8.png"&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;&lt;img border="0" width="575" src="http://www.nhforge.org/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/nhibernate/image_5F00_thumb_5F00_3.png" alt="image" height="445" /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/nhibernate/image_5F00_8.png"&gt;&lt;span style="background: SpringGreen;"&gt;&lt;img height="445" alt="image" src="/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/nhibernate/image_5F00_thumb_5F00_3.png" width="575" border="0" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The order entity is the&amp;nbsp;&lt;em&gt;root&lt;/em&gt;&amp;nbsp;and the order lines belong to the aggregate (can be regarded as children of the&amp;nbsp;&lt;em&gt;root&lt;/em&gt;). When creating a new order or changing an existing one we only want to modify either the order itself or its order lines. We certainly do not want to change the customer entity because this would be a completely different use case and does not belong to the&amp;nbsp;&lt;em&gt;order management&lt;/em&gt;&amp;nbsp;use case.&lt;/p&gt;
&lt;p&gt;So, when dealing with aggregates we often want to load the complete aggregate in one go! This is the perfect example for using&amp;nbsp;&lt;strong&gt;eager loading&lt;/strong&gt;&amp;nbsp;techniques.&lt;/p&gt;
&lt;h2&gt;Summary&lt;/h2&gt;
&lt;p&gt;I have introduced the concept of lazy loading as provided by NHibernate. I have discussed the consequences and shown how to avoid negative side effects by using different techniques of so called eager loading.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.nhforge.org/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/nhibernate/Blog-Signature-Gabriel_5F00_2.png"&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;&lt;img border="0" width="244" src="http://www.nhforge.org/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/nhibernate/Blog-Signature-Gabriel_5F00_thumb.png" alt="Blog Signature Gabriel" height="21" /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/nhibernate/Blog-Signature-Gabriel_5F00_2.png"&gt;&lt;span style="background: SpringGreen;"&gt;&lt;img height="21" alt="Blog Signature Gabriel" src="/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/nhibernate/Blog-Signature-Gabriel_5F00_thumb.png" width="244" border="0" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description></item><item><title>Lazy loading - eager loading</title><link>http://nhforge.org/wikis/howtonh/lazy-loading-eager-loading/revision/3.aspx</link><pubDate>Sat, 06 Sep 2008 22:02:06 GMT</pubDate><guid isPermaLink="false">45f813f2-f1c4-4eda-a619-288e3cadc793:49</guid><dc:creator>gabriel.schenker</dc:creator><comments>http://nhforge.org/wikis/howtonh/lazy-loading-eager-loading/comments.aspx</comments><description>Revision 3 posted to How to by gabriel.schenker on 06/09/2008 07:02:06 p.m.&lt;br /&gt;
&lt;h2&gt;Lazy loading - eager loading&lt;/h2&gt;
&lt;p&gt;&lt;a href="/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/nhibernate/Blog-Signature-Gabriel_5F00_4.png"&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;&lt;img border="0" width="244" src="/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/nhibernate/Blog-Signature-Gabriel_5F00_thumb_5F00_1.png" alt="Blog Signature Gabriel" height="21" style="border-right:0px;border-top:0px;border-left:0px;border-bottom:0px;" /&gt;&lt;/span&gt;&lt;p&gt;&lt;span&gt;
&lt;p&gt;&lt;a href="http://www.nhforge.org/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/nhibernate/Blog-Signature-Gabriel_5F00_4.png"&gt;&lt;span style="background: SpringGreen;"&gt;&lt;img border="0" width="244" src="http://www.nhforge.org/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/nhibernate/Blog-Signature-Gabriel_5F00_thumb_5F00_1.png" alt="Blog Signature Gabriel" height="21" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;In this article I want to discuss the&amp;nbsp;&lt;a href="http://martinfowler.com/eaaCatalog/lazyLoad.html"&gt;lazy loading&lt;/a&gt;&amp;nbsp;mechanism provided by NHibernate. It is recommended for maximum flexibility to define all relations in your domain as lazy loadable. This is the default behavior of NHibernate since version 1.2. But this can lead to some undesired effects if querying your data. Let&amp;#39;s discuss these effects and how to avoid them.&lt;/p&gt;
&lt;p&gt;In my previous posts I showed&amp;nbsp;&lt;a href="http://blogs.hibernatingrhinos.com/nhibernate/archive/2008/03/31/prepare-your-system-for-nhibernate.aspx"&gt;how to prepare your system for NHibernate&lt;/a&gt;&amp;nbsp;and&amp;nbsp;&lt;a href="http://www.nhforge.org/wikis/howtonh/your-first-nhibernate-based-application.aspx"&gt;how to implement a first NHibernate base application&lt;/a&gt;. This post is based on those two articles.&lt;/p&gt;
&lt;h2&gt;The Domain&lt;/h2&gt;
&lt;p&gt;Let&amp;#39;s first define a simple domain. It shows part of an order entry system. I keep this model as simple as possible (a real domain model would be more complex) but it contains all aspects we want to discuss in this post. Below is the class diagram of our model&lt;/p&gt;
&lt;p&gt;&lt;a href="/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/nhibernate/image_5F00_4.png"&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;&lt;img border="0" width="480" src="/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/nhibernate/image_5F00_thumb_5F00_1.png" alt="image" height="389" style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.nhforge.org/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/nhibernate/image_5F00_4.png"&gt;&lt;span style="background: SpringGreen;"&gt;&lt;img border="0" width="480" src="http://www.nhforge.org/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/nhibernate/image_5F00_thumb_5F00_1.png" alt="image" height="389" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;We have an order entity which can be placed by a customer entity. Each order can have many order line entities. Each of the three entity types is uniquely identified by a property Id (surrogate key).&lt;/p&gt;
&lt;h2&gt;The Mapping Files&lt;/h2&gt;
&lt;p&gt;We have to write one mapping file per entity. It is recommended that you always have one mapping per file. Don&amp;#39;t forget to set the&amp;nbsp;&lt;strong&gt;Build Action&lt;/strong&gt;&amp;nbsp;of each mapping file to&amp;nbsp;&lt;strong&gt;Embedded Resource&lt;/strong&gt;. People often tend to forget it and the subsequent errors raised by NHibernate are not always obvious. Also do not forget to give the mapping files the correct name, that is *.&lt;strong&gt;hbm&lt;/strong&gt;.xml where * denotes the placeholder for the entity name.&lt;/p&gt;
&lt;p&gt;The mapping for the&amp;nbsp;&lt;strong&gt;Order&lt;/strong&gt;&amp;nbsp;entity might be implemented as follows&lt;/p&gt;
&lt;div class="csharpcode"&gt;
&lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;&amp;lt;?&lt;/span&gt;&lt;span class="html"&gt;xml&lt;/span&gt; &lt;span class="attr"&gt;version&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;1.0&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;encoding&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;utf-8&amp;quot;&lt;/span&gt; ?&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;hibernate-mapping&lt;/span&gt; &lt;span class="attr"&gt;xmlns&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;urn:nhibernate-mapping-2.2&amp;quot;&lt;/span&gt;&lt;/pre&gt;
&lt;pre class="alt"&gt;                   &lt;span class="attr"&gt;assembly&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;LazyLoadEagerLoad&amp;quot;&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;                   &lt;span class="attr"&gt;namespace&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;LazyLoadEagerLoad.Domain&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre class="alt"&gt;  &lt;/pre&gt;
&lt;pre&gt;  &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;class&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;Order&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;table&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;Orders&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre class="alt"&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;id&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;Id&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;      &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;generator&lt;/span&gt; &lt;span class="attr"&gt;class&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;guid&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre class="alt"&gt;    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;id&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;property&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;OrderNumber&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre class="alt"&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;property&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;OrderDate&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;    &lt;/pre&gt;
&lt;pre class="alt"&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;many-to-one&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;Customer&amp;quot;&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre class="alt"&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;set&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;OrderLines&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;cascade&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;all-delete-orphan&amp;quot;&lt;/span&gt; &lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;      &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;key&lt;/span&gt; &lt;span class="attr"&gt;column&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;OrderId&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre class="alt"&gt;      &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;one-to-many&lt;/span&gt; &lt;span class="attr"&gt;class&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;OrderLine&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;set&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre class="alt"&gt;    &lt;/pre&gt;
&lt;pre&gt;  &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;class&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre class="alt"&gt;  &lt;/pre&gt;
&lt;pre&gt;&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;hibernate-mapping&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;&amp;lt;style&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;type=&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;&amp;quot;text/css&amp;quot;&amp;gt;&amp;lt;!--&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode,&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;pre&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;{&lt;/span&gt;
	&lt;span style="text-decoration: line-through; color: red;"&gt;font-size&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;small&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;;&lt;/span&gt;
	&lt;span style="text-decoration: line-through; color: red;"&gt;color&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;black&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;;&lt;/span&gt;
	&lt;span style="text-decoration: line-through; color: red;"&gt;font-family&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;consolas&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;,&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;&amp;quot;Courier&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;New&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;&amp;quot;,&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;courier&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;,&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;monospace&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;;&lt;/span&gt;
	&lt;span style="text-decoration: line-through; color: red;"&gt;background-color&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;#&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;ffffff;&lt;/span&gt;
	&lt;span style="text-decoration: line-through; color: red;"&gt;/&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;*white-space:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;pre;*&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;/&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;}&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;pre&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;{&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;margin&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;0em&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;;&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;}&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;rem&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;{&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;color&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;#&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;008000;&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;}&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;kwrd&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;{&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;color&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;#&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;0000ff;&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;}&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;str&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;{&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;color&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;#&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;006080;&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;}&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;op&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;{&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;color&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;#&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;0000c0;&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;}&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;preproc&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;{&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;color&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;#&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;cc6633;&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;}&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;asp&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;{&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;background-color&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;#&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;ffff00;&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;}&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;html&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;{&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;color&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;#&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;800000;&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;}&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;attr&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;{&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;color&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;#&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;ff0000;&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;}&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;alt&lt;/span&gt; 
&lt;span style="text-decoration: line-through; color: red;"&gt;{&lt;/span&gt;
	&lt;span style="text-decoration: line-through; color: red;"&gt;background-color&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;#&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;f4f4f4;&lt;/span&gt;
	&lt;span style="text-decoration: line-through; color: red;"&gt;width&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;100%&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;;&lt;/span&gt;
	&lt;span style="text-decoration: line-through; color: red;"&gt;margin&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;0em&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;;&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;}&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;lnum&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;{&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;color&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;#&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;606060;&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;}&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;-&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;-&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;&amp;gt;&amp;lt;/style&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;Analogous you can implement the mappings for the&amp;nbsp;&lt;strong&gt;Customer&lt;/strong&gt;&amp;nbsp;entity&lt;/p&gt;
&lt;div class="csharpcode"&gt;
&lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;&amp;lt;?&lt;/span&gt;&lt;span class="html"&gt;xml&lt;/span&gt; &lt;span class="attr"&gt;version&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;1.0&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;encoding&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;utf-8&amp;quot;&lt;/span&gt; ?&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;
&lt;pre&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;hibernate-mapping&lt;/span&gt; &lt;span class="attr"&gt;xmlns&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;urn:nhibernate-mapping-2.2&amp;quot;&lt;/span&gt;&lt;/pre&gt;
&lt;pre class="alt"&gt;                   &lt;span class="attr"&gt;assembly&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;LazyLoadEagerLoad&amp;quot;&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;                   &lt;span class="attr"&gt;namespace&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;LazyLoadEagerLoad.Domain&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre class="alt"&gt;  &lt;/pre&gt;
&lt;pre&gt;  &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;class&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;Customer&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre class="alt"&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;id&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;Id&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;      &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;generator&lt;/span&gt; &lt;span class="attr"&gt;class&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;guid&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre class="alt"&gt;    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;id&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;property&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;CompanyName&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre class="alt"&gt;  &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;class&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;hibernate-mapping&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;&amp;lt;style&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;type=&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;&amp;quot;text/css&amp;quot;&amp;gt;&amp;lt;!--&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode,&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;pre&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;{&lt;/span&gt;
	&lt;span style="text-decoration: line-through; color: red;"&gt;font-size&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;small&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;;&lt;/span&gt;
	&lt;span style="text-decoration: line-through; color: red;"&gt;color&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;black&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;;&lt;/span&gt;
	&lt;span style="text-decoration: line-through; color: red;"&gt;font-family&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;consolas&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;,&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;&amp;quot;Courier&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;New&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;&amp;quot;,&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;courier&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;,&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;monospace&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;;&lt;/span&gt;
	&lt;span style="text-decoration: line-through; color: red;"&gt;background-color&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;#&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;ffffff;&lt;/span&gt;
	&lt;span style="text-decoration: line-through; color: red;"&gt;/&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;*white-space:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;pre;*&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;/&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;}&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;pre&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;{&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;margin&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;0em&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;;&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;}&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;rem&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;{&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;color&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;#&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;008000;&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;}&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;kwrd&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;{&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;color&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;#&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;0000ff;&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;}&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;str&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;{&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;color&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;#&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;006080;&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;}&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;op&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;{&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;color&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;#&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;0000c0;&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;}&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;preproc&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;{&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;color&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;#&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;cc6633;&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;}&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;asp&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;{&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;background-color&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;#&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;ffff00;&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;}&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;html&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;{&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;color&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;#&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;800000;&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;}&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;attr&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;{&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;color&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;#&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;ff0000;&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;}&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;alt&lt;/span&gt; 
&lt;span style="text-decoration: line-through; color: red;"&gt;{&lt;/span&gt;
	&lt;span style="text-decoration: line-through; color: red;"&gt;background-color&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;#&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;f4f4f4;&lt;/span&gt;
	&lt;span style="text-decoration: line-through; color: red;"&gt;width&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;100%&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;;&lt;/span&gt;
	&lt;span style="text-decoration: line-through; color: red;"&gt;margin&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;0em&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;;&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;}&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;lnum&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;{&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;color&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;#&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;606060;&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;}&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;-&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;-&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;&amp;gt;&amp;lt;/style&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;and finally the mapping for the&amp;nbsp;&lt;strong&gt;OrderLine&lt;/strong&gt;&amp;nbsp;entity.&lt;/p&gt;
&lt;div class="csharpcode"&gt;
&lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;&amp;lt;?&lt;/span&gt;&lt;span class="html"&gt;xml&lt;/span&gt; &lt;span class="attr"&gt;version&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;1.0&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;encoding&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;utf-8&amp;quot;&lt;/span&gt; ?&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;
&lt;pre&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;hibernate-mapping&lt;/span&gt; &lt;span class="attr"&gt;xmlns&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;urn:nhibernate-mapping-2.2&amp;quot;&lt;/span&gt;&lt;/pre&gt;
&lt;pre class="alt"&gt;                   &lt;span class="attr"&gt;assembly&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;LazyLoadEagerLoad&amp;quot;&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;                   &lt;span class="attr"&gt;namespace&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;LazyLoadEagerLoad.Domain&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre class="alt"&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre&gt;  &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;class&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;OrderLine&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre class="alt"&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;id&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;Id&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;      &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;generator&lt;/span&gt; &lt;span class="attr"&gt;class&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;guid&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre class="alt"&gt;    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;id&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;property&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;Amount&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre class="alt"&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;property&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;ProductName&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;  &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;class&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre class="alt"&gt;  &lt;/pre&gt;
&lt;pre&gt;&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;hibernate-mapping&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;&amp;lt;style&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;type=&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;&amp;quot;text/css&amp;quot;&amp;gt;&amp;lt;!--&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode,&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;pre&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;{&lt;/span&gt;
	&lt;span style="text-decoration: line-through; color: red;"&gt;font-size&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;small&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;;&lt;/span&gt;
	&lt;span style="text-decoration: line-through; color: red;"&gt;color&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;black&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;;&lt;/span&gt;
	&lt;span style="text-decoration: line-through; color: red;"&gt;font-family&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;consolas&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;,&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;&amp;quot;Courier&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;New&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;&amp;quot;,&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;courier&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;,&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;monospace&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;;&lt;/span&gt;
	&lt;span style="text-decoration: line-through; color: red;"&gt;background-color&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;#&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;ffffff;&lt;/span&gt;
	&lt;span style="text-decoration: line-through; color: red;"&gt;/&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;*white-space:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;pre;*&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;/&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;}&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;pre&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;{&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;margin&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;0em&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;;&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;}&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;rem&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;{&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;color&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;#&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;008000;&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;}&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;kwrd&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;{&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;color&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;#&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;0000ff;&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;}&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;str&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;{&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;color&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;#&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;006080;&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;}&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;op&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;{&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;color&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;#&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;0000c0;&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;}&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;preproc&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;{&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;color&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;#&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;cc6633;&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;}&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;asp&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;{&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;background-color&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;#&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;ffff00;&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;}&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;html&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;{&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;color&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;#&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;800000;&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;}&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;attr&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;{&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;color&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;#&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;ff0000;&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;}&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;alt&lt;/span&gt; 
&lt;span style="text-decoration: line-through; color: red;"&gt;{&lt;/span&gt;
	&lt;span style="text-decoration: line-through; color: red;"&gt;background-color&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;#&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;f4f4f4;&lt;/span&gt;
	&lt;span style="text-decoration: line-through; color: red;"&gt;width&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;100%&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;;&lt;/span&gt;
	&lt;span style="text-decoration: line-through; color: red;"&gt;margin&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;0em&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;;&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;}&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;lnum&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;{&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;color&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;#&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;606060;&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;}&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;-&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;-&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;&amp;gt;&amp;lt;/style&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;Testing the Mapping&lt;/h2&gt;
&lt;p&gt;To test the mapping we use the following test method&lt;/p&gt;
&lt;div class="csharpcode"&gt;
&lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; LazyLoadEagerLoad.Domain;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; NHibernate.Cfg;&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; NHibernate.Tool.hbm2ddl;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; NUnit.Framework;&lt;/pre&gt;
&lt;pre class="alt"&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="kwrd"&gt;namespace&lt;/span&gt; LazyLoadEagerLoad.Tests&lt;/pre&gt;
&lt;pre class="alt"&gt;{&lt;/pre&gt;
&lt;pre&gt;    [TestFixture]&lt;/pre&gt;
&lt;pre class="alt"&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; GenerateSchema_Fixture&lt;/pre&gt;
&lt;pre&gt;    {&lt;/pre&gt;
&lt;pre class="alt"&gt;        [Test]&lt;/pre&gt;
&lt;pre&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Can_generate_schema()&lt;/pre&gt;
&lt;pre class="alt"&gt;        {&lt;/pre&gt;
&lt;pre&gt;            var cfg = &lt;span class="kwrd"&gt;new&lt;/span&gt; Configuration();&lt;/pre&gt;
&lt;pre class="alt"&gt;            cfg.Configure();&lt;/pre&gt;
&lt;pre&gt;            cfg.AddAssembly(&lt;span class="kwrd"&gt;typeof&lt;/span&gt;(Order).Assembly);&lt;/pre&gt;
&lt;pre class="alt"&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre&gt;            &lt;span class="kwrd"&gt;new&lt;/span&gt; SchemaExport(cfg).Execute(&lt;span class="kwrd"&gt;false&lt;/span&gt;, &lt;span class="kwrd"&gt;true&lt;/span&gt;, &lt;span class="kwrd"&gt;false&lt;/span&gt;, &lt;span class="kwrd"&gt;false&lt;/span&gt;)&lt;span style="text-decoration: line-through; color: red;"&gt;;&lt;/span&gt;&lt;/pre&gt;
&lt;pre class="alt"&gt;        &lt;span style="text-decoration: line-through; color: red;"&gt;}&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;    &lt;span style="text-decoration: line-through; color: red;"&gt;}&lt;/span&gt;&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;}&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;&amp;lt;style&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;type=&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;&amp;quot;text/css&amp;quot;&amp;gt;&amp;lt;!--&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode,&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;pre&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;{&lt;/span&gt;
	&lt;span style="text-decoration: line-through; color: red;"&gt;font-size&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;small&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;;&lt;/span&gt;
	&lt;span style="text-decoration: line-through; color: red;"&gt;color&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;black&lt;/span&gt;;&lt;span style="text-decoration: line-through; color: red;"&gt;font-family&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;consolas&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;,&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;&amp;quot;Courier&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;New&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;&amp;quot;,&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;courier&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;,&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;monospace&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;;&lt;/span&gt;
	&lt;span style="text-decoration: line-through; color: red;"&gt;background-color&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;#&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;ffffff;&lt;/span&gt;
	&lt;span style="text-decoration: line-through; color: red;"&gt;/&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;*white-space:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;pre;*&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;/&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;}&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;pre&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;{&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;margin&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;0em&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;;&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;}&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;rem&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;{&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;color&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;#&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;008000;&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;}&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;kwrd&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;{&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;color&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;#&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;0000ff;&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;}&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;str&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;{&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;color&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;#&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;006080;&lt;/span&gt; &lt;/pre&gt;
&lt;pre class="alt"&gt;        }&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;op&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;{&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;color&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;#&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;0000c0;&lt;/span&gt; &lt;/pre&gt;
&lt;pre&gt;    }&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;preproc&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;{&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;color&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;#&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;cc6633;&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;}&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;asp&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;{&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;background-color&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;#&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;ffff00;&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;}&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;html&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;{&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;color&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;#&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;800000;&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;}&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;attr&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;{&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;color&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;#&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;ff0000;&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;}&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;alt&lt;/span&gt; 
&lt;span style="text-decoration: line-through; color: red;"&gt;{&lt;/span&gt;
	&lt;span style="text-decoration: line-through; color: red;"&gt;background-color&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;#&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;f4f4f4;&lt;/span&gt;
	&lt;span style="text-decoration: line-through; color: red;"&gt;width&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;100%&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;;&lt;/span&gt;
	&lt;span style="text-decoration: line-through; color: red;"&gt;margin&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;0em&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;;&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;}&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;lnum&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;{&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;color&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;#&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;606060;&lt;/span&gt; &lt;/pre&gt;
&lt;pre class="alt"&gt;}&lt;span style="text-decoration: line-through; color: red;"&gt;-&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;-&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;&amp;gt;&amp;lt;/style&amp;gt;&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
First we create a new instance of the NHibernate Configuration class and tell it to configure itself. Since we don&amp;#39;t provide any explicit configuration here in the code NHibernate looks out for an adequate configuration file. I have included such a file (called hibernate.cfg.xml) in my project. Please consult&amp;nbsp;&lt;a href="http://blogs.hibernatingrhinos.com/nhibernate/archive/2008/04/01/your-first-nhibernate-based-application.aspx"&gt;this&lt;/a&gt;&amp;nbsp;previous post for further details about the configuration file.
&lt;h2&gt;Testing the Loading Behavior of NHibernate&lt;/h2&gt;
&lt;h3&gt;Defining a base class for our tests&lt;/h3&gt;
&lt;p&gt;To avoid repetitive task (&lt;a href="http://en.wikipedia.org/wiki/Don&amp;#39;t_repeat_yourself"&gt;DRY&lt;/a&gt;&amp;nbsp;principle) we implement the following base class.&lt;/p&gt;
&lt;div class="csharpcode"&gt;
&lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; LazyLoadEagerLoad.Domain;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; NHibernate;&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; NHibernate.Cfg;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; NHibernate.Tool.hbm2ddl;&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; NUnit.Framework;&lt;/pre&gt;
&lt;pre&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;namespace&lt;/span&gt; LazyLoadEagerLoad.Tests&lt;/pre&gt;
&lt;pre&gt;{&lt;/pre&gt;
&lt;pre class="alt"&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; TestFixtureBase&lt;/pre&gt;
&lt;pre&gt;    {&lt;/pre&gt;
&lt;pre class="alt"&gt;        &lt;span class="kwrd"&gt;private&lt;/span&gt; Configuration _configuration;&lt;/pre&gt;
&lt;pre&gt;        &lt;span class="kwrd"&gt;private&lt;/span&gt; ISessionFactory _sessionFactory;&lt;/pre&gt;
&lt;pre class="alt"&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre&gt;        &lt;span class="kwrd"&gt;protected&lt;/span&gt; ISessionFactory SessionFactory&lt;/pre&gt;
&lt;pre class="alt"&gt;        {&lt;/pre&gt;
&lt;pre&gt;            get { &lt;span class="kwrd"&gt;return&lt;/span&gt; _sessionFactory; }&lt;/pre&gt;
&lt;pre class="alt"&gt;        }&lt;/pre&gt;
&lt;pre&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre class="alt"&gt;        [TestFixtureSetUp]&lt;/pre&gt;
&lt;pre&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; TestFixtureSetUp()&lt;/pre&gt;
&lt;pre class="alt"&gt;        {&lt;/pre&gt;
&lt;pre&gt;            _configuration = &lt;span class="kwrd"&gt;new&lt;/span&gt; Configuration();&lt;/pre&gt;
&lt;pre class="alt"&gt;            _configuration.Configure();&lt;/pre&gt;
&lt;pre&gt;            _configuration.AddAssembly(&lt;span class="kwrd"&gt;typeof&lt;/span&gt;(Customer).Assembly);&lt;/pre&gt;
&lt;pre class="alt"&gt;            _sessionFactory = _configuration.BuildSessionFactory();&lt;/pre&gt;
&lt;pre&gt;        }&lt;/pre&gt;
&lt;pre class="alt"&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre&gt;        [TestFixtureTearDown]&lt;/pre&gt;
&lt;pre class="alt"&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; TestFixtureTearDown()&lt;/pre&gt;
&lt;pre&gt;        {&lt;/pre&gt;
&lt;pre class="alt"&gt;            _sessionFactory.Close();&lt;/pre&gt;
&lt;pre&gt;        }&lt;/pre&gt;
&lt;pre class="alt"&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre&gt;        [SetUp]&lt;/pre&gt;
&lt;pre class="alt"&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; SetupContext()&lt;/pre&gt;
&lt;pre&gt;        {&lt;/pre&gt;
&lt;pre class="alt"&gt;            &lt;span class="kwrd"&gt;new&lt;/span&gt; SchemaExport(_configuration).Execute(&lt;span class="kwrd"&gt;false&lt;/span&gt;, &lt;span class="kwrd"&gt;true&lt;/span&gt;, &lt;span class="kwrd"&gt;false&lt;/span&gt;, &lt;span class="kwrd"&gt;false&lt;/span&gt;);&lt;/pre&gt;
&lt;pre&gt;            Before_each_test();&lt;/pre&gt;
&lt;pre class="alt"&gt;        }&lt;/pre&gt;
&lt;pre&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre class="alt"&gt;        [TearDown]&lt;/pre&gt;
&lt;pre&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; TearDownContext()&lt;/pre&gt;
&lt;pre class="alt"&gt;        {&lt;/pre&gt;
&lt;pre&gt;            After_each_test();&lt;/pre&gt;
&lt;pre class="alt"&gt;        }&lt;/pre&gt;
&lt;pre&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre class="alt"&gt;        &lt;span class="kwrd"&gt;protected&lt;/span&gt; &lt;span class="kwrd"&gt;virtual&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Before_each_test()&lt;/pre&gt;
&lt;pre&gt;        { }&lt;/pre&gt;
&lt;pre class="alt"&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre&gt;        &lt;span class="kwrd"&gt;protected&lt;/span&gt; &lt;span class="kwrd"&gt;virtual&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; After_each_test()&lt;/pre&gt;
&lt;pre class="alt"&gt;        { }&lt;/pre&gt;
&lt;pre&gt;    }&lt;/pre&gt;
&lt;pre class="alt"&gt;}&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;When the test fixture is started, the base class configures NHibernate and creates a session factory (&lt;strong&gt;TestFixtureSetUp&lt;/strong&gt;). When the whole test fixture is ended the session factory is closed (&lt;strong&gt;TestFixtureTearDown&lt;/strong&gt;).&lt;/p&gt;
&lt;p&gt;Before each test in the fixture is run the database schema is (re-) created and the virtual&amp;nbsp;&lt;strong&gt;Before_each_test&lt;/strong&gt;&amp;nbsp;method is called. After each test in the fixture is finished the virtual&amp;nbsp;&lt;strong&gt;After_each_test&lt;/strong&gt;&amp;nbsp;method is called. The two virtual methods can (but must not necessarily) be overridden in a child class&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;&amp;lt;style&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;type=&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;&amp;quot;text/css&amp;quot;&amp;gt;&amp;lt;!--&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode,&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;pre&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;{&lt;/span&gt;
	&lt;span style="text-decoration: line-through; color: red;"&gt;font-size&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;small&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;;&lt;/span&gt;
	&lt;span style="text-decoration: line-through; color: red;"&gt;color&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;black&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;;&lt;/span&gt;
	&lt;span style="text-decoration: line-through; color: red;"&gt;font-family&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;consolas&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;,&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;&amp;quot;Courier&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;New&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;&amp;quot;,&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;courier&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;,&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;monospace&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;;&lt;/span&gt;
	&lt;span style="text-decoration: line-through; color: red;"&gt;background-color&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;#&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;ffffff;&lt;/span&gt;
	&lt;span style="text-decoration: line-through; color: red;"&gt;/&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;*white-space:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;pre;*&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;/&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;}&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;pre&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;{&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;margin&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;0em&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;;&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;}&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;rem&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;{&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;color&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;#&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;008000;&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;}&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;kwrd&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;{&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;color&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;#&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;0000ff;&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;}&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;str&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;{&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;color&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;#&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;006080;&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;}&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;op&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;{&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;color&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;#&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;0000c0;&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;}&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;preproc&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;{&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;color&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;#&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;cc6633;&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;}&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;asp&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;{&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;background-color&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;#&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;ffff00;&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;}&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;html&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;{&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;color&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;#&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;800000;&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;}&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;attr&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;{&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;color&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;#&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;ff0000;&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;}&lt;/span&gt;
.&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;alt&lt;/span&gt; 
&lt;span style="text-decoration: line-through; color: red;"&gt;{&lt;/span&gt;
	&lt;span style="text-decoration: line-through; color: red;"&gt;background-color&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;#&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;f4f4f4;&lt;/span&gt;
	&lt;span style="text-decoration: line-through; color: red;"&gt;width&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;100%&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;;&lt;/span&gt;
	&lt;span style="text-decoration: line-through; color: red;"&gt;margin&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;0em&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;;&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;}&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;lnum&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;{&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;color&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;#&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;606060;&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;}&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;-&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;-&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;&amp;gt;&amp;lt;/style&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;All our test fixtures we implement will derive from this base class.&lt;/p&gt;
&lt;h3&gt;Filling the database with test data&lt;/h3&gt;
&lt;p&gt;To be able to test the loading behavior of NHibernate we need some test data in our database. We create this test data every time a test is run (just after the database schema is re-created). We add a new class&amp;nbsp;&lt;strong&gt;Order_Fixture&lt;/strong&gt;&amp;nbsp;to our test project and inherit from the&amp;nbsp;&lt;strong&gt;TestFixtureBase&lt;/strong&gt;&amp;nbsp;base class. Then we override the Before_each_test method and call a helper method which creates our initial data. We create just the absolute minimum of data we need (again --&amp;gt;DRY). That is: one customer placing one order with two order lines.&lt;/p&gt;
&lt;div class="csharpcode"&gt;
&lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; LazyLoadEagerLoad.Domain;&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; NHibernate;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; NHibernate.Criterion;&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; NHibernate.SqlCommand;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; NUnit.Framework;&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; Order=LazyLoadEagerLoad.Domain.Order;&lt;/pre&gt;
&lt;pre&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;namespace&lt;/span&gt; LazyLoadEagerLoad.Tests&lt;/pre&gt;
&lt;pre&gt;{&lt;/pre&gt;
&lt;pre class="alt"&gt;    [TestFixture]&lt;/pre&gt;
&lt;pre&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; Order_Fixture : TestFixtureBase&lt;/pre&gt;
&lt;pre class="alt"&gt;    {&lt;/pre&gt;
&lt;pre&gt;        &lt;span class="kwrd"&gt;private&lt;/span&gt; Order _order;&lt;/pre&gt;
&lt;pre class="alt"&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre&gt;        &lt;span class="kwrd"&gt;protected&lt;/span&gt; &lt;span class="kwrd"&gt;override&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Before_each_test()&lt;/pre&gt;
&lt;pre class="alt"&gt;        {&lt;/pre&gt;
&lt;pre&gt;            &lt;span class="kwrd"&gt;base&lt;/span&gt;.Before_each_test();&lt;/pre&gt;
&lt;pre class="alt"&gt;            CreateInitialData();&lt;/pre&gt;
&lt;pre&gt;        }&lt;/pre&gt;
&lt;pre class="alt"&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre&gt;        &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; CreateInitialData()&lt;/pre&gt;
&lt;pre class="alt"&gt;        {&lt;/pre&gt;
&lt;pre&gt;            &lt;span class="rem"&gt;// create a single customer and an order with two order lines for this customer&lt;/span&gt;&lt;/pre&gt;
&lt;pre class="alt"&gt;            var customer = &lt;span class="kwrd"&gt;new&lt;/span&gt; Customer {CompanyName = &lt;span class="str"&gt;&amp;quot;IBM&amp;quot;&lt;/span&gt;};&lt;/pre&gt;
&lt;pre&gt;            var line1 = &lt;span class="kwrd"&gt;new&lt;/span&gt; OrderLine {Amount = 5, ProductName = &lt;span class="str"&gt;&amp;quot;Laptop XYZ&amp;quot;&lt;/span&gt;};&lt;/pre&gt;
&lt;pre class="alt"&gt;            var line2 = &lt;span class="kwrd"&gt;new&lt;/span&gt; OrderLine {Amount = 2, ProductName = &lt;span class="str"&gt;&amp;quot;Desktop PC A100&amp;quot;&lt;/span&gt;};&lt;/pre&gt;
&lt;pre&gt;            _order = &lt;span class="kwrd"&gt;new&lt;/span&gt; Order&lt;/pre&gt;
&lt;pre class="alt"&gt;                        {&lt;/pre&gt;
&lt;pre&gt;                            OrderNumber = &lt;span class="str"&gt;&amp;quot;o-100-001&amp;quot;&lt;/span&gt;,&lt;/pre&gt;
&lt;pre class="alt"&gt;                            OrderDate = DateTime.Today,&lt;/pre&gt;
&lt;pre&gt;                            Customer = customer&lt;/pre&gt;
&lt;pre class="alt"&gt;                        };&lt;/pre&gt;
&lt;pre&gt;            _order.OrderLines.Add(line1);&lt;/pre&gt;
&lt;pre class="alt"&gt;            _order.OrderLines.Add(line2);&lt;/pre&gt;
&lt;pre&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre class="alt"&gt;            &lt;span class="kwrd"&gt;using&lt;/span&gt; (ISession session = SessionFactory.OpenSession())&lt;/pre&gt;
&lt;pre&gt;                &lt;span class="kwrd"&gt;using&lt;/span&gt; (ITransaction transaction = session.BeginTransaction())&lt;/pre&gt;
&lt;pre class="alt"&gt;                {&lt;/pre&gt;
&lt;pre&gt;                    session.Save(customer);&lt;/pre&gt;
&lt;pre class="alt"&gt;                    session.Save(_order);&lt;/pre&gt;
&lt;pre&gt;                    transaction.Commit()&lt;span style="text-decoration: line-through; color: red;"&gt;;&lt;/span&gt;&lt;/pre&gt;
&lt;pre class="alt"&gt;                &lt;span style="text-decoration: line-through; color: red;"&gt;}&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;        &lt;span style="text-decoration: line-through; color: red;"&gt;}&lt;/span&gt;&lt;/pre&gt;
&lt;pre class="alt"&gt;    &lt;span style="text-decoration: line-through; color: red;"&gt;}&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;}&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;&amp;lt;style&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;type=&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;&amp;quot;text/css&amp;quot;&amp;gt;&amp;lt;!--&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode,&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;pre&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;{&lt;/span&gt;
	&lt;span style="text-decoration: line-through; color: red;"&gt;font-size&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;small&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;;&lt;/span&gt;
	&lt;span style="text-decoration: line-through; color: red;"&gt;color&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;black&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;;&lt;/span&gt;
	&lt;span style="text-decoration: line-through; color: red;"&gt;font-family&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;consolas&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;,&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;&amp;quot;Courier&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;New&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;&amp;quot;,&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;courier&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;,&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;monospace&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;;&lt;/span&gt;
	&lt;span style="text-decoration: line-through; color: red;"&gt;background-color&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;#&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;ffffff;&lt;/span&gt;
	&lt;span style="text-decoration: line-through; color: red;"&gt;/&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;*white-space:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;pre;*&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;/&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;}&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;pre&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;{&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;margin&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;0em&lt;/span&gt;;&lt;span style="text-decoration: line-through; color: red;"&gt;}&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;rem&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;{&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;color&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;#&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;008000;&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;}&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;kwrd&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;{&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;color&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;#&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;0000ff;&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;}&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;str&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;{&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;color&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;#&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;006080;&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;}&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;op&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;{&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;color&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;#&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;0000c0;&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;}&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;preproc&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;{&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;color&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;#&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;cc6633;&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;}&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;asp&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;{&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;background-color&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;#&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;ffff00;&lt;/span&gt; &lt;/pre&gt;
&lt;pre class="alt"&gt;                }&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;html&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;{&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;color&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;#&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;800000;&lt;/span&gt; &lt;/pre&gt;
&lt;pre&gt;        }&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;attr&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;{&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;color&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;#&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;ff0000;&lt;/span&gt; &lt;/pre&gt;
&lt;pre class="alt"&gt;    }&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;alt&lt;/span&gt; 
&lt;span style="text-decoration: line-through; color: red;"&gt;{&lt;/span&gt;
	&lt;span style="text-decoration: line-through; color: red;"&gt;background-color&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;#&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;f4f4f4;&lt;/span&gt;
	&lt;span style="text-decoration: line-through; color: red;"&gt;width&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;100%&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;;&lt;/span&gt;
	&lt;span style="text-decoration: line-through; color: red;"&gt;margin&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;0em&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;;&lt;/span&gt;
&lt;/pre&gt;
&lt;pre&gt;}&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;lnum&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;{&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;color&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;#&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;606060;&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;}&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;-&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;-&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;&amp;gt;&amp;lt;/style&amp;gt;&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;The&amp;nbsp;&lt;strong&gt;CreateInitialData&lt;/strong&gt;&amp;nbsp;method is run before each test. With this we guarantee that each test is side effects free.&lt;/p&gt;
&lt;h3&gt;Verifying the default behavior - Lazy Loading&lt;/h3&gt;
&lt;p&gt;When loading an order entity from database the default behavior of NHibernate is to lazy load all associated objects of the order entity. Let&amp;#39;s write a test to verify this. For the verification we use a utility class provided by NHibernate (NHibernateUtil) which can test whether an associated object or object collection is initialized (i.e. loaded) or not. The class can also force the initialization of an un-initialized relation.&lt;/p&gt;
&lt;div class="csharpcode"&gt;
&lt;pre class="alt"&gt;[Test]&lt;/pre&gt;
&lt;pre&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Customer_and_OrderLines_are_not_loaded_when_loading_Order()&lt;/pre&gt;
&lt;pre class="alt"&gt;{&lt;/pre&gt;
&lt;pre&gt;    Order fromDb;&lt;/pre&gt;
&lt;pre class="alt"&gt;    &lt;span class="kwrd"&gt;using&lt;/span&gt; (ISession session = SessionFactory.OpenSession())&lt;/pre&gt;
&lt;pre&gt;        fromDb = session.Get&amp;lt;Order&amp;gt;(_order.Id);&lt;/pre&gt;
&lt;pre class="alt"&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre&gt;    Assert.IsFalse(NHibernateUtil.IsInitialized(fromDb.Customer));&lt;/pre&gt;
&lt;pre class="alt"&gt;    Assert.IsFalse(NHibernateUtil.IsInitialized(fromDb.OrderLines))&lt;span style="text-decoration: line-through; color: red;"&gt;;&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;}&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;&amp;lt;style&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;type=&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;&amp;quot;text/css&amp;quot;&amp;gt;&amp;lt;!--&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode,&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;pre&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;{&lt;/span&gt;
	&lt;span style="text-decoration: line-through; color: red;"&gt;font-size&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;small&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;;&lt;/span&gt;
	&lt;span style="text-decoration: line-through; color: red;"&gt;color&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;black&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;;&lt;/span&gt;
	&lt;span style="text-decoration: line-through; color: red;"&gt;font-family&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;consolas&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;,&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;&amp;quot;Courier&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;New&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;&amp;quot;,&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;courier&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;,&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;monospace&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;;&lt;/span&gt;
	&lt;span style="text-decoration: line-through; color: red;"&gt;background-color&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;#&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;ffffff;&lt;/span&gt;
	&lt;span style="text-decoration: line-through; color: red;"&gt;/&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;*white-space:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;pre;*&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;/&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;}&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;pre&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;{&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;margin&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;0em&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;;&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;}&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;rem&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;{&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;color&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;#&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;008000;&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;}&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;kwrd&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;{&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;color&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;#&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;0000ff;&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;}&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;str&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;{&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;color&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;#&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;006080;&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;}&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;op&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;{&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;color&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;#&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;0000c0;&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;}&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;preproc&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;{&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;color&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;#&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;cc6633;&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;}&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;asp&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;{&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;background-color&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;#&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;ffff00;&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;}&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;html&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;{&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;color&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;#&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;800000;&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;}&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;attr&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;{&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;color&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;#&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;ff0000;&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;}&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;alt&lt;/span&gt; 
&lt;span style="text-decoration: line-through; color: red;"&gt;{&lt;/span&gt;
	&lt;span style="text-decoration: line-through; color: red;"&gt;background-color&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;#&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;f4f4f4;&lt;/span&gt;
	&lt;span style="text-decoration: line-through; color: red;"&gt;width&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;100%&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;;&lt;/span&gt;
	&lt;span style="text-decoration: line-through; color: red;"&gt;margin&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;0em&lt;/span&gt;;&lt;/pre&gt;
&lt;pre&gt;}&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;lnum&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;{&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;color&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;#&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;606060;&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;}&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;-&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;-&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;&amp;gt;&amp;lt;/style&amp;gt;&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;The test succeeds and NHibernate generates SQL similar to this one&lt;/p&gt;
&lt;div class="csharpcode"&gt;
&lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;SELECT&lt;/span&gt;    order0_.Id &lt;span class="kwrd"&gt;as&lt;/span&gt; Id0_0_, &lt;/pre&gt;
&lt;pre&gt;    order0_.OrderNumber &lt;span class="kwrd"&gt;as&lt;/span&gt; OrderNum2_0_0_, &lt;/pre&gt;
&lt;pre class="alt"&gt;    order0_.OrderDate &lt;span class="kwrd"&gt;as&lt;/span&gt; OrderDate0_0_, &lt;/pre&gt;
&lt;pre&gt;    order0_.CustomerId &lt;span class="kwrd"&gt;as&lt;/span&gt; CustomerId0_0_ &lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;FROM&lt;/span&gt;    Orders order0_ &lt;/pre&gt;
&lt;pre&gt;&lt;span class="kwrd"&gt;WHERE&lt;/span&gt;    order0_.Id=&lt;span class="str"&gt;&amp;#39;15bca5b3-2771-4bee-9923-85bda66318d8&amp;#39;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;&amp;lt;style&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;type=&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;&amp;quot;text/css&amp;quot;&amp;gt;&amp;lt;!--&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode,&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;pre&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;{&lt;/span&gt;
	&lt;span style="text-decoration: line-through; color: red;"&gt;font-size&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;small&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;;&lt;/span&gt;
	&lt;span style="text-decoration: line-through; color: red;"&gt;color&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;black&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;;&lt;/span&gt;
	&lt;span style="text-decoration: line-through; color: red;"&gt;font-family&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;consolas&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;,&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;&amp;quot;Courier&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;New&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;&amp;quot;,&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;courier&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;,&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;monospace&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;;&lt;/span&gt;
	&lt;span style="text-decoration: line-through; color: red;"&gt;background-color&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;#&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;ffffff;&lt;/span&gt;
	&lt;span style="text-decoration: line-through; color: red;"&gt;/&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;*white-space:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;pre;*&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;/&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;}&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;pre&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;{&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;margin&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;0em&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;;&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;}&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;rem&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;{&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;color&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;#&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;008000;&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;}&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;kwrd&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;{&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;color&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;#&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;0000ff;&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;}&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;str&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;{&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;color&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;#&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;006080;&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;}&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;op&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;{&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;color&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;#&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;0000c0;&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;}&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;preproc&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;{&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;color&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;#&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;cc6633;&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;}&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;asp&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;{&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;background-color&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;#&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;ffff00;&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;}&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;html&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;{&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;color&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;#&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;800000;&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;}&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;attr&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;{&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;color&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;#&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;ff0000;&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;}&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;alt&lt;/span&gt; 
&lt;span style="text-decoration: line-through; color: red;"&gt;{&lt;/span&gt;
	&lt;span style="text-decoration: line-through; color: red;"&gt;background-color&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;#&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;f4f4f4;&lt;/span&gt;
	&lt;span style="text-decoration: line-through; color: red;"&gt;width&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;100%&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;;&lt;/span&gt;
	&lt;span style="text-decoration: line-through; color: red;"&gt;margin&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;0em&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;;&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;}&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;lnum&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;{&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;color&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;#&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;606060;&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;}&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;-&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;-&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;&amp;gt;&amp;lt;/style&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Now we have a problem: If we want to access the order line items (after the session has been closed) we get an exception. Since the session is closed NHibernate cannot lazily load the order line items for us. We can show this behavior with the following test method&lt;/p&gt;
&lt;div class="csharpcode"&gt;
&lt;pre class="alt"&gt;[Test]&lt;/pre&gt;
&lt;pre&gt;[ExpectedException(&lt;span class="kwrd"&gt;typeof&lt;/span&gt;(LazyInitializationException))]&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Accessing_customer_of_order_after_session_is_closed_throws()&lt;/pre&gt;
&lt;pre&gt;{&lt;/pre&gt;
&lt;pre class="alt"&gt;    Order fromDb;&lt;/pre&gt;
&lt;pre&gt;    &lt;span class="kwrd"&gt;using&lt;/span&gt; (ISession session = SessionFactory.OpenSession())&lt;/pre&gt;
&lt;pre class="alt"&gt;        fromDb = session.Get&amp;lt;Order&amp;gt;(_order.Id);&lt;/pre&gt;
&lt;pre&gt;    &lt;/pre&gt;
&lt;pre class="alt"&gt;    &lt;span class="rem"&gt;// trying to access the Customer of the order, will throw exception&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;    &lt;span class="rem"&gt;// Note: at this point the session is already closed&lt;/span&gt;&lt;/pre&gt;
&lt;pre class="alt"&gt;    &lt;span class="kwrd"&gt;string&lt;/span&gt; name = fromDb.Customer.CompanyName;&lt;/pre&gt;
&lt;pre&gt;}&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;Note: the above test&amp;nbsp;&lt;strong&gt;only&lt;/strong&gt;&amp;nbsp;succeeds if the method throws the expected exception of type&amp;nbsp;&lt;strong&gt;LazyInitializationException&lt;/strong&gt;. And this is just what we want to show!&lt;span style="text-decoration: line-through; color: red;"&gt;&amp;lt;style&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;type=&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;&amp;quot;text/css&amp;quot;&amp;gt;&amp;lt;!--&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode,&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;pre&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;{&lt;/span&gt;
	&lt;span style="text-decoration: line-through; color: red;"&gt;font-size&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;small&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;;&lt;/span&gt;
	&lt;span style="text-decoration: line-through; color: red;"&gt;color&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;black&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;;&lt;/span&gt;
	&lt;span style="text-decoration: line-through; color: red;"&gt;font-family&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;consolas&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;,&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;&amp;quot;Courier&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;New&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;&amp;quot;,&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;courier&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;,&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;monospace&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;;&lt;/span&gt;
	&lt;span style="text-decoration: line-through; color: red;"&gt;background-color&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;#&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;ffffff;&lt;/span&gt;
	&lt;span style="text-decoration: line-through; color: red;"&gt;/&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;*white-space:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;pre;*&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;/&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;}&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;pre&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;{&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;margin&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;0em&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;;&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;}&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;rem&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;{&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;color&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;#&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;008000;&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;}&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;kwrd&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;{&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;color&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;#&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;0000ff;&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;}&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;str&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;{&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;color&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;#&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;006080;&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;}&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;op&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;{&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;color&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;#&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;0000c0;&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;}&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;preproc&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;{&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;color&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;#&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;cc6633;&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;}&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;asp&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;{&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;background-color&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;#&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;ffff00;&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;}&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;html&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;{&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;color&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;#&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;800000;&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;}&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;attr&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;{&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;color&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;#&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;ff0000;&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;}&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;alt&lt;/span&gt; 
&lt;span style="text-decoration: line-through; color: red;"&gt;{&lt;/span&gt;
	&lt;span style="text-decoration: line-through; color: red;"&gt;background-color&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;#&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;f4f4f4;&lt;/span&gt;
	&lt;span style="text-decoration: line-through; color: red;"&gt;width&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;100%&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;;&lt;/span&gt;
	&lt;span style="text-decoration: line-through; color: red;"&gt;margin&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;0em&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;;&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;}&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;lnum&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;{&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;color&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;#&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;606060;&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;}&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;-&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;-&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;&amp;gt;&amp;lt;/style&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;Another problem is the&amp;nbsp;&lt;strong&gt;n+1 select statements problem&lt;/strong&gt;. If we access the order line items after loading the order we generate a select statement for each line item we access. Thus if we have n line items and want to access them all we generate one select statement for the order itself and n select statements for all line items (result: n+1 select statements). This can make our data fetching rather slow and put a (unnecessary) burden onto our database.&lt;/p&gt;
&lt;p&gt;We can simulate this behavior with this test method&lt;/p&gt;
&lt;div class="csharpcode"&gt;
&lt;pre class="alt"&gt;[Test]&lt;/pre&gt;
&lt;pre&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Show_n_plus_1_select_behavior()&lt;/pre&gt;
&lt;pre class="alt"&gt;{&lt;/pre&gt;
&lt;pre&gt;    &lt;span class="kwrd"&gt;using&lt;/span&gt; (ISession session = SessionFactory.OpenSession())&lt;/pre&gt;
&lt;pre class="alt"&gt;    {&lt;/pre&gt;
&lt;pre&gt;        var fromDb = session.Get&amp;lt;Order&amp;gt;(_order.Id);&lt;/pre&gt;
&lt;pre class="alt"&gt;        &lt;span class="kwrd"&gt;int&lt;/span&gt; sum = 0;&lt;/pre&gt;
&lt;pre&gt;        &lt;span class="kwrd"&gt;foreach&lt;/span&gt; (var line &lt;span class="kwrd"&gt;in&lt;/span&gt; fromDb.OrderLines)&lt;/pre&gt;
&lt;pre class="alt"&gt;        {&lt;/pre&gt;
&lt;pre&gt;            &lt;span class="rem"&gt;// just some dummy code to force loading of order line&lt;/span&gt;&lt;/pre&gt;
&lt;pre class="alt"&gt;            sum += line.Amount;&lt;/pre&gt;
&lt;pre&gt;        } &lt;/pre&gt;
&lt;pre class="alt"&gt;    }&lt;/pre&gt;
&lt;pre&gt;}&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;NHibernate will generate SQL similar to the following&lt;span style="text-decoration: line-through; color: red;"&gt;&amp;lt;style&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;type=&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;&amp;quot;text/css&amp;quot;&amp;gt;&amp;lt;!--&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode,&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;pre&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;{&lt;/span&gt;
	&lt;span style="text-decoration: line-through; color: red;"&gt;font-size&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;small&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;;&lt;/span&gt;
	&lt;span style="text-decoration: line-through; color: red;"&gt;color&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;black&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;;&lt;/span&gt;
	&lt;span style="text-decoration: line-through; color: red;"&gt;font-family&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;consolas&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;,&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;&amp;quot;Courier&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;New&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;&amp;quot;,&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;courier&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;,&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;monospace&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;;&lt;/span&gt;
	&lt;span style="text-decoration: line-through; color: red;"&gt;background-color&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;#&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;ffffff;&lt;/span&gt;
	&lt;span style="text-decoration: line-through; color: red;"&gt;/&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;*white-space:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;pre;*&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;/&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;}&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;pre&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;{&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;margin&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;0em&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;;&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;}&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;rem&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;{&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;color&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;#&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;008000;&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;}&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;kwrd&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;{&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;color&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;#&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;0000ff;&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;}&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;str&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;{&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;color&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;#&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;006080;&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;}&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;op&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;{&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;color&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;#&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;0000c0;&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;}&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;preproc&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;{&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;color&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;#&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;cc6633;&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;}&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;asp&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;{&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;background-color&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;#&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;ffff00;&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;}&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;html&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;{&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;color&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;#&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;800000;&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;}&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;attr&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;{&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;color&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;#&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;ff0000;&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;}&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;alt&lt;/span&gt; 
&lt;span style="text-decoration: line-through; color: red;"&gt;{&lt;/span&gt;
	&lt;span style="text-decoration: line-through; color: red;"&gt;background-color&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;#&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;f4f4f4;&lt;/span&gt;
	&lt;span style="text-decoration: line-through; color: red;"&gt;width&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;100%&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;;&lt;/span&gt;
	&lt;span style="text-decoration: line-through; color: red;"&gt;margin&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;0em&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;;&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;}&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;lnum&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;{&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;color&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;#&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;606060;&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;}&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;-&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;-&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;&amp;gt;&amp;lt;/style&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;div class="csharpcode"&gt;
&lt;pre class="alt"&gt;SELECT order0_.Id &lt;span class="kwrd"&gt;as&lt;/span&gt; Id3_0_, &lt;/pre&gt;
&lt;pre&gt;       order0_.OrderNumber &lt;span class="kwrd"&gt;as&lt;/span&gt; OrderNum2_3_0_, &lt;/pre&gt;
&lt;pre class="alt"&gt;       order0_.OrderDate &lt;span class="kwrd"&gt;as&lt;/span&gt; OrderDate3_0_, &lt;/pre&gt;
&lt;pre&gt;       order0_.Customer &lt;span class="kwrd"&gt;as&lt;/span&gt; Customer3_0_ &lt;/pre&gt;
&lt;pre class="alt"&gt;FROM   Orders order0_ &lt;/pre&gt;
&lt;pre&gt;WHERE  order0_.Id=&lt;span class="str"&gt;&amp;#39;5b2dbcb7-d0bf-4c53-86aa-8cd40cb5061a&amp;#39;&lt;/span&gt;&lt;/pre&gt;
&lt;pre class="alt"&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre&gt;SELECT orderlines0_.OrderId &lt;span class="kwrd"&gt;as&lt;/span&gt; OrderId1_, &lt;/pre&gt;
&lt;pre class="alt"&gt;       orderlines0_.Id &lt;span class="kwrd"&gt;as&lt;/span&gt; Id1_, &lt;/pre&gt;
&lt;pre&gt;       orderlines0_.Id &lt;span class="kwrd"&gt;as&lt;/span&gt; Id4_0_, &lt;/pre&gt;
&lt;pre class="alt"&gt;       orderlines0_.Amount &lt;span class="kwrd"&gt;as&lt;/span&gt; Amount4_0_, &lt;/pre&gt;
&lt;pre&gt;       orderlines0_.ProductName &lt;span class="kwrd"&gt;as&lt;/span&gt; ProductN3_4_0_ &lt;/pre&gt;
&lt;pre class="alt"&gt;FROM   OrderLine orderlines0_ &lt;/pre&gt;
&lt;pre&gt;WHERE  orderlines0_.OrderId=&lt;span class="str"&gt;&amp;#39;5b2dbcb7-d0bf-4c53-86aa-8cd40cb5061a&amp;#39;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;&amp;lt;style&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;type=&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;&amp;quot;text/css&amp;quot;&amp;gt;&amp;lt;!--&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode,&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;pre&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;{&lt;/span&gt;
	&lt;span style="text-decoration: line-through; color: red;"&gt;font-size&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;small&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;;&lt;/span&gt;
	&lt;span style="text-decoration: line-through; color: red;"&gt;color&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;black&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;;&lt;/span&gt;
	&lt;span style="text-decoration: line-through; color: red;"&gt;font-family&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;consolas&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;,&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;&amp;quot;Courier&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;New&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;&amp;quot;,&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;courier&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;,&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;monospace&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;;&lt;/span&gt;
	&lt;span style="text-decoration: line-through; color: red;"&gt;background-color&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;#&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;ffffff;&lt;/span&gt;
	&lt;span style="text-decoration: line-through; color: red;"&gt;/&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;*white-space:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;pre;*&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;/&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;}&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;pre&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;{&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;margin&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;0em&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;;&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;}&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;rem&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;{&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;color&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;#&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;008000;&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;}&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;kwrd&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;{&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;color&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;#&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;0000ff;&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;}&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;str&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;{&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;color&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;#&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;006080;&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;}&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;op&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;{&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;color&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;#&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;0000c0;&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;}&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;preproc&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;{&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;color&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;#&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;cc6633;&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;}&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;asp&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;{&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;background-color&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;#&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;ffff00;&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;}&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;html&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;{&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;color&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;#&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;800000;&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;}&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;attr&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;{&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;color&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;#&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;ff0000;&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;}&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;alt&lt;/span&gt; 
&lt;span style="text-decoration: line-through; color: red;"&gt;{&lt;/span&gt;
	&lt;span style="text-decoration: line-through; color: red;"&gt;background-color&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;#&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;f4f4f4;&lt;/span&gt;
	&lt;span style="text-decoration: line-through; color: red;"&gt;width&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;100%&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;;&lt;/span&gt;
	&lt;span style="text-decoration: line-through; color: red;"&gt;margin&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;0em&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;;&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;}&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;lnum&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;{&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;color&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;#&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;606060;&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;}&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;-&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;-&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;&amp;gt;&amp;lt;/style&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;This time we have been lucky! NHibernate has automatically generated an optimized query for us and has loaded the 2 order line items in one go. But this is not always the case! Imagine having a collection with several 100 items and you only need to access one or two of them. It would be a waste of resources to always load all items.&lt;/p&gt;
&lt;p&gt;But fortunately we have a solution for these kind of problems with NHibernate. It&amp;#39;s called eagerly loading.&lt;/p&gt;
&lt;h3&gt;Eagerly loading with the NHibernateUtil class&lt;/h3&gt;
&lt;p&gt;If you know you need have access to related objects of the order entity you can use the&amp;nbsp;&lt;strong&gt;NHibernateUtil&lt;/strong&gt;&amp;nbsp;class to initialize the related objects (that is: to fetch them from the database). Have a look at this test methods&lt;/p&gt;
&lt;div class="csharpcode"&gt;
&lt;pre class="alt"&gt;[Test]&lt;/pre&gt;
&lt;pre&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Can_initialize_customer_of_order_with_nhibernate_util()&lt;/pre&gt;
&lt;pre class="alt"&gt;{&lt;/pre&gt;
&lt;pre&gt;    Order fromDb;&lt;/pre&gt;
&lt;pre class="alt"&gt;    &lt;span class="kwrd"&gt;using&lt;/span&gt; (ISession session = SessionFactory.OpenSession())&lt;/pre&gt;
&lt;pre&gt;    {&lt;/pre&gt;
&lt;pre class="alt"&gt;        fromDb = session.Get&amp;lt;Order&amp;gt;(_order.Id);&lt;/pre&gt;
&lt;pre&gt;        NHibernateUtil.Initialize(fromDb.Customer);&lt;/pre&gt;
&lt;pre class="alt"&gt;    }&lt;/pre&gt;
&lt;pre&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre class="alt"&gt;    Assert.IsTrue(NHibernateUtil.IsInitialized(fromDb.Customer));&lt;/pre&gt;
&lt;pre&gt;    Assert.IsFalse(NHibernateUtil.IsInitialized(fromDb.OrderLines));&lt;/pre&gt;
&lt;pre class="alt"&gt;}&lt;/pre&gt;
&lt;pre&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre class="alt"&gt;[Test]&lt;/pre&gt;
&lt;pre&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Can_initialize_order_lines_of_order_with_nhibernate_util()&lt;/pre&gt;
&lt;pre class="alt"&gt;{&lt;/pre&gt;
&lt;pre&gt;    Order fromDb;&lt;/pre&gt;
&lt;pre class="alt"&gt;    &lt;span class="kwrd"&gt;using&lt;/span&gt; (ISession session = SessionFactory.OpenSession())&lt;/pre&gt;
&lt;pre&gt;    {&lt;/pre&gt;
&lt;pre class="alt"&gt;        fromDb = session.Get&amp;lt;Order&amp;gt;(_order.Id);&lt;/pre&gt;
&lt;pre&gt;        NHibernateUtil.Initialize(fromDb.OrderLines);&lt;/pre&gt;
&lt;pre class="alt"&gt;    }&lt;/pre&gt;
&lt;pre&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre class="alt"&gt;    Assert.IsFalse(NHibernateUtil.IsInitialized(fromDb.Customer));&lt;/pre&gt;
&lt;pre&gt;    Assert.IsTrue(NHibernateUtil.IsInitialized(fromDb.OrderLines))&lt;span style="text-decoration: line-through; color: red;"&gt;;&lt;/span&gt;&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;}&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;&amp;lt;style&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;type=&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;&amp;quot;text/css&amp;quot;&amp;gt;&amp;lt;!--&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode,&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;pre&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;{&lt;/span&gt;
	&lt;span style="text-decoration: line-through; color: red;"&gt;font-size&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;small&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;;&lt;/span&gt;
	&lt;span style="text-decoration: line-through; color: red;"&gt;color&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;black&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;;&lt;/span&gt;
	&lt;span style="text-decoration: line-through; color: red;"&gt;font-family&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;consolas&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;,&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;&amp;quot;Courier&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;New&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;&amp;quot;,&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;courier&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;,&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;monospace&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;;&lt;/span&gt;
	&lt;span style="text-decoration: line-through; color: red;"&gt;background-color&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;#&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;ffffff;&lt;/span&gt;
	&lt;span style="text-decoration: line-through; color: red;"&gt;/&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;*white-space:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;pre;*&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;/&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;}&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;pre&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;{&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;margin&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;0em&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;;&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;}&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;rem&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;{&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;color&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;#&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;008000;&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;}&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;kwrd&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;{&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;color&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;#&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;0000ff;&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;}&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;str&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;{&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;color&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;#&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;006080;&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;}&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;op&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;{&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;color&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;#&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;0000c0;&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;}&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;preproc&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;{&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;color&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;#&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;cc6633;&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;}&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;asp&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;{&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;background-color&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;#&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;ffff00;&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;}&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;html&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;{&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;color&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;#&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;800000;&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;}&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;attr&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;{&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;color&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;#&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;ff0000;&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;}&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;alt&lt;/span&gt; 
&lt;span style="text-decoration: line-through; color: red;"&gt;{&lt;/span&gt;
	&lt;span style="text-decoration: line-through; color: red;"&gt;background-color&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;#&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;f4f4f4;&lt;/span&gt;
	&lt;span style="text-decoration: line-through; color: red;"&gt;width&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;100%&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;;&lt;/span&gt;
	&lt;span style="text-decoration: line-through; color: red;"&gt;margin&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;0em&lt;/span&gt;;&lt;/pre&gt;
&lt;pre class="alt"&gt;}&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;lnum&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;{&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;color&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;#&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;606060;&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;}&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;-&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;-&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;&amp;gt;&amp;lt;/style&amp;gt;&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;With this utility class you can initialize single objects as well as collection of objects. In each case NHibernate will send 2 select statements to the database. One to select the order and one to initialize the related object(s).&lt;/p&gt;
&lt;h3&gt;Eagerly loading with HQL&lt;/h3&gt;
&lt;p&gt;If you know that you want to load all order items of a given order then you can tell NHibernate to do so and eagerly load all order lines together with the order in one go. The following test method shows how you can formulate a HQL query which not only loads the order but also the associated customer and order lines.&lt;/p&gt;
&lt;div class="csharpcode"&gt;
&lt;pre class="alt"&gt;[Test]&lt;/pre&gt;
&lt;pre&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Can_eagerly_load_order_aggregate_with_hql_query()&lt;/pre&gt;
&lt;pre class="alt"&gt;{&lt;/pre&gt;
&lt;pre&gt;    Order fromDb;&lt;/pre&gt;
&lt;pre class="alt"&gt;    &lt;span class="kwrd"&gt;using&lt;/span&gt; (ISession session = SessionFactory.OpenSession())&lt;/pre&gt;
&lt;pre&gt;    {&lt;/pre&gt;
&lt;pre class="alt"&gt;        &lt;span class="kwrd"&gt;string&lt;/span&gt; sql = &lt;span class="str"&gt;&amp;quot;from Order o&amp;quot;&lt;/span&gt; +&lt;/pre&gt;
&lt;pre&gt;                     &lt;span class="str"&gt;&amp;quot; inner join fetch o.OrderLines&amp;quot;&lt;/span&gt; +&lt;/pre&gt;
&lt;pre class="alt"&gt;                     &lt;span class="str"&gt;&amp;quot; inner join fetch o.Customer&amp;quot;&lt;/span&gt; +&lt;/pre&gt;
&lt;pre&gt;                     &lt;span class="str"&gt;&amp;quot; where o.Id=:id&amp;quot;&lt;/span&gt;;&lt;/pre&gt;
&lt;pre class="alt"&gt;        fromDb = session.CreateQuery(sql)&lt;/pre&gt;
&lt;pre&gt;                        .SetGuid(&lt;span class="str"&gt;&amp;quot;id&amp;quot;&lt;/span&gt;, _order.Id)&lt;/pre&gt;
&lt;pre class="alt"&gt;                        .UniqueResult&amp;lt;Order&amp;gt;();&lt;/pre&gt;
&lt;pre&gt;    }&lt;/pre&gt;
&lt;pre class="alt"&gt;    Assert.IsTrue(NHibernateUtil.IsInitialized(fromDb.Customer));&lt;/pre&gt;
&lt;pre&gt;    Assert.IsTrue(NHibernateUtil.IsInitialized(fromDb.OrderLines))&lt;span style="text-decoration: line-through; color: red;"&gt;;&lt;/span&gt;&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;}&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;&amp;lt;style&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;type=&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;&amp;quot;text/css&amp;quot;&amp;gt;&amp;lt;!--&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode,&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;pre&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;{&lt;/span&gt;
	&lt;span style="text-decoration: line-through; color: red;"&gt;font-size&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;small&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;;&lt;/span&gt;
	&lt;span style="text-decoration: line-through; color: red;"&gt;color&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;black&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;;&lt;/span&gt;
	&lt;span style="text-decoration: line-through; color: red;"&gt;font-family&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;consolas&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;,&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;&amp;quot;Courier&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;New&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;&amp;quot;,&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;courier&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;,&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;monospace&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;;&lt;/span&gt;
	&lt;span style="text-decoration: line-through; color: red;"&gt;background-color&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;#&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;ffffff;&lt;/span&gt;
	&lt;span style="text-decoration: line-through; color: red;"&gt;/&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;*white-space:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;pre;*&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;/&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;}&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;pre&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;{&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;margin&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;0em&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;;&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;}&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;rem&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;{&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;color&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;#&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;008000;&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;}&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;kwrd&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;{&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;color&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;#&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;0000ff;&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;}&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;str&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;{&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;color&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;#&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;006080;&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;}&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;op&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;{&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;color&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;#&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;0000c0;&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;}&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;preproc&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;{&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;color&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;#&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;cc6633;&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;}&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;asp&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;{&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;background-color&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;#&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;ffff00;&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;}&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;html&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;{&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;color&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;#&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;800000;&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;}&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;attr&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;{&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;color&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;#&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;ff0000;&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;}&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;alt&lt;/span&gt; 
&lt;span style="text-decoration: line-through; color: red;"&gt;{&lt;/span&gt;
	&lt;span style="text-decoration: line-through; color: red;"&gt;background-color&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;#&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;f4f4f4;&lt;/span&gt;
	&lt;span style="text-decoration: line-through; color: red;"&gt;width&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;100%&lt;/span&gt;;&lt;span style="text-decoration: line-through; color: red;"&gt;margin&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;0em&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;;&lt;/span&gt;
&lt;/pre&gt;
&lt;pre class="alt"&gt;}&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;lnum&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;{&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;color&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;#&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;606060;&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;}&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;-&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;-&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;&amp;gt;&amp;lt;/style&amp;gt;&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;The resulting sql generated by NHibernate is then similar to this one&lt;/p&gt;
&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;select&lt;/span&gt;      order0_.Id &lt;span class="kwrd"&gt;as&lt;/span&gt; Id0_0_, 
            orderlines1_.Id &lt;span class="kwrd"&gt;as&lt;/span&gt; Id1_1_, 
            customer2_.Id &lt;span class="kwrd"&gt;as&lt;/span&gt; Id2_2_, 
            order0_.OrderNumber &lt;span class="kwrd"&gt;as&lt;/span&gt; OrderNum2_0_0_, 
            order0_.OrderDate &lt;span class="kwrd"&gt;as&lt;/span&gt; OrderDate0_0_, 
            order0_.CustomerId &lt;span class="kwrd"&gt;as&lt;/span&gt; CustomerId0_0_, 
            orderlines1_.Amount &lt;span class="kwrd"&gt;as&lt;/span&gt; Amount1_1_, 
            orderlines1_.ProductName &lt;span class="kwrd"&gt;as&lt;/span&gt; ProductN3_1_1_, 
            customer2_.CompanyName &lt;span class="kwrd"&gt;as&lt;/span&gt; CompanyN2_2_2_, 
            orderlines1_.OrderId &lt;span class="kwrd"&gt;as&lt;/span&gt; OrderId0__, 
            orderlines1_.Id &lt;span class="kwrd"&gt;as&lt;/span&gt; Id0__ 
&lt;span class="kwrd"&gt;from&lt;/span&gt;        Orders order0_ 
&lt;span class="kwrd"&gt;inner&lt;/span&gt; &lt;span class="kwrd"&gt;join&lt;/span&gt;  OrderLine orderlines1_ &lt;span class="kwrd"&gt;on&lt;/span&gt; order0_.Id=orderlines1_.OrderId 
&lt;span class="kwrd"&gt;inner&lt;/span&gt; &lt;span class="kwrd"&gt;join&lt;/span&gt;  Customer customer2_ &lt;span class="kwrd"&gt;on&lt;/span&gt; order0_.CustomerId=customer2_.Id 
&lt;span class="kwrd"&gt;where&lt;/span&gt;       order0_.Id=&lt;span class="str"&gt;&amp;#39;409ebd99-3206-459b-bfed-6df989284da9&amp;#39;&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;&amp;lt;style&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;type=&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;&amp;quot;text/css&amp;quot;&amp;gt;&amp;lt;!--&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode,&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;pre&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;{&lt;/span&gt;
	&lt;span style="text-decoration: line-through; color: red;"&gt;font-size&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;small&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;;&lt;/span&gt;
	&lt;span style="text-decoration: line-through; color: red;"&gt;color&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;black&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;;&lt;/span&gt;
	&lt;span style="text-decoration: line-through; color: red;"&gt;font-family&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;consolas&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;,&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;&amp;quot;Courier&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;New&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;&amp;quot;,&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;courier&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;,&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;monospace&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;;&lt;/span&gt;
	&lt;span style="text-decoration: line-through; color: red;"&gt;background-color&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;#&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;ffffff;&lt;/span&gt;
	&lt;span style="text-decoration: line-through; color: red;"&gt;/&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;*white-space:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;pre;*&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;/&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;}&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;pre&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;{&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;margin&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;0em&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;;&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;}&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;rem&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;{&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;color&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;#&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;008000;&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;}&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;kwrd&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;{&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;color&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;#&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;0000ff;&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;}&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;str&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;{&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;color&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;#&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;006080;&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;}&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;op&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;{&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;color&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;#&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;0000c0;&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;}&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;preproc&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;{&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;color&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;#&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;cc6633;&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;}&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;asp&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;{&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;background-color&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;#&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;ffff00;&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;}&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;html&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;{&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;color&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;#&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;800000;&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;}&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;attr&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;{&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;color&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;#&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;ff0000;&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;}&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;alt&lt;/span&gt; 
&lt;span style="text-decoration: line-through; color: red;"&gt;{&lt;/span&gt;
	&lt;span style="text-decoration: line-through; color: red;"&gt;background-color&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;#&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;f4f4f4;&lt;/span&gt;
	&lt;span style="text-decoration: line-through; color: red;"&gt;width&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;100%&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;;&lt;/span&gt;
	&lt;span style="text-decoration: line-through; color: red;"&gt;margin&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;0em&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;;&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;}&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;lnum&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;{&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;color&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;#&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;606060;&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;}&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;-&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;-&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;&amp;gt;&amp;lt;/style&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;NHibernate has created an SQL select statement which joins the 3 tables involved, namely&amp;nbsp;&lt;strong&gt;Orders&lt;/strong&gt;,&amp;nbsp;&lt;strong&gt;Customer&lt;/strong&gt;&amp;nbsp;and&lt;strong&gt;OrderLine&lt;/strong&gt;. The returned (flat) set of records is then used by NHibernate to build up the object tree with the order entity as a root.&lt;/p&gt;
&lt;h2&gt;Aggregates in the Domain&lt;/h2&gt;
&lt;p&gt;DDD defines the concept of&amp;nbsp;&lt;a href="http://domaindrivendesign.org/discussion/messageboardarchive/Aggregates.html"&gt;aggregates&lt;/a&gt;. A short definition of an aggregate is &amp;quot;&lt;em&gt;A cluster of associated objects that are treated as a unit for the purpose of data changes.&lt;span style="text-decoration: line-through; color: red;"&gt;&amp;quot;.&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;&amp;quot;.&amp;nbsp;&lt;/span&gt;&lt;/em&gt;An aggregate always has a&amp;nbsp;&lt;em&gt;root&lt;/em&gt;.&lt;em&gt;&amp;nbsp;&lt;/em&gt;In this context we can define the following aggregate in our domain&lt;/p&gt;
&lt;p&gt;&lt;a href="/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/nhibernate/image_5F00_8.png"&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;&lt;img border="0" width="575" src="/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/nhibernate/image_5F00_thumb_5F00_3.png" alt="image" height="445" style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.nhforge.org/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/nhibernate/image_5F00_8.png"&gt;&lt;span style="background: SpringGreen;"&gt;&lt;img border="0" width="575" src="http://www.nhforge.org/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/nhibernate/image_5F00_thumb_5F00_3.png" alt="image" height="445" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The order entity is the&amp;nbsp;&lt;em&gt;root&lt;/em&gt;&amp;nbsp;and the order lines belong to the aggregate (can be regarded as children of the&amp;nbsp;&lt;em&gt;root&lt;/em&gt;). When creating a new order or changing an existing one we only want to modify either the order itself or its order lines. We certainly do not want to change the customer entity because this would be a completely different use case and does not belong to the&amp;nbsp;&lt;em&gt;order management&lt;/em&gt;&amp;nbsp;use case.&lt;/p&gt;
&lt;p&gt;So, when dealing with aggregates we often want to load the complete aggregate in one go! This is the perfect example for using&amp;nbsp;&lt;strong&gt;eager loading&lt;/strong&gt;&amp;nbsp;techniques.&lt;/p&gt;
&lt;h2&gt;Summary&lt;/h2&gt;
&lt;p&gt;I have introduced the concept of lazy loading as provided by NHibernate. I have discussed the consequences and shown how to avoid negative side effects by using different techniques of so called eager loading.&lt;/p&gt;
&lt;p&gt;&lt;a href="/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/nhibernate/Blog-Signature-Gabriel_5F00_2.png"&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;&lt;img border="0" width="244" src="/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/nhibernate/Blog-Signature-Gabriel_5F00_thumb.png" alt="Blog Signature Gabriel" height="21" style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.nhforge.org/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/nhibernate/Blog-Signature-Gabriel_5F00_2.png"&gt;&lt;span style="background: SpringGreen;"&gt;&lt;img border="0" width="244" src="http://www.nhforge.org/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/nhibernate/Blog-Signature-Gabriel_5F00_thumb.png" alt="Blog Signature Gabriel" height="21" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/span&gt;&lt;/p&gt;</description></item><item><title>Lazy loading - eager loading</title><link>http://nhforge.org/wikis/howtonh/lazy-loading-eager-loading/revision/2.aspx</link><pubDate>Sat, 06 Sep 2008 21:55:57 GMT</pubDate><guid isPermaLink="false">45f813f2-f1c4-4eda-a619-288e3cadc793:48</guid><dc:creator>gabriel.schenker</dc:creator><comments>http://nhforge.org/wikis/howtonh/lazy-loading-eager-loading/comments.aspx</comments><description>Revision 2 posted to How to by gabriel.schenker on 06/09/2008 06:55:57 p.m.&lt;br /&gt;
&lt;h2&gt;Lazy loading - eager loading&lt;/h2&gt;
&lt;p&gt;&lt;a href="/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/nhibernate/Blog-Signature-Gabriel_5F00_4.png"&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;&lt;img style="border-right:0px;border-top:0px;border-left:0px;border-bottom:0px;" alt="Blog Signature Gabriel" src="/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/nhibernate/Blog-Signature-Gabriel_5F00_thumb_5F00_1.png" width="244" border="0" height="21" /&gt;&lt;/span&gt;&lt;p&gt;&lt;a href="/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/nhibernate/Blog-Signature-Gabriel_5F00_4.png"&gt;&lt;span style="background: SpringGreen;"&gt;&lt;img border="0" width="244" src="/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/nhibernate/Blog-Signature-Gabriel_5F00_thumb_5F00_1.png" alt="Blog Signature Gabriel" height="21" style="border-right:0px;border-top:0px;border-left:0px;border-bottom:0px;" /&gt;&lt;/span&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;In this article I want to discuss the &lt;a href="http://martinfowler.com/eaaCatalog/lazyLoad.html"&gt;lazy loading&lt;/a&gt; mechanism provided by NHibernate. It is recommended for maximum flexibility to define all relations in your domain as lazy loadable. This is the default behavior of NHibernate since version 1.2. But this can lead to some undesired effects if querying your data. Let&amp;#39;s discuss these effects and how to avoid them.&lt;/p&gt;
&lt;p&gt;In my previous posts I showed &lt;a href="http://blogs.hibernatingrhinos.com/nhibernate/archive/2008/03/31/prepare-your-system-for-nhibernate.aspx"&gt;how to prepare your system for NHibernate&lt;/a&gt; and &lt;a href="/wikis/howtonh/your-first-nhibernate-based-application.aspx"&gt;how to implement a first NHibernate base application&lt;/a&gt;. This post is based on those two articles.&lt;/p&gt;
&lt;h2&gt;The Domain&lt;/h2&gt;
&lt;p&gt;Let&amp;#39;s first define a simple domain. It shows part of an order entry system. I keep this model as simple as possible (a real domain model would be more complex) but it contains all aspects we want to discuss in this post. Below is the class diagram of our model&lt;/p&gt;
&lt;p&gt;&lt;a href="/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/nhibernate/image_5F00_4.png"&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" alt="image" src="/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/nhibernate/image_5F00_thumb_5F00_1.png" width="480" border="0" height="389" /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/nhibernate/image_5F00_4.png"&gt;&lt;span style="background: SpringGreen;"&gt;&lt;img border="0" width="480" src="/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/nhibernate/image_5F00_thumb_5F00_1.png" alt="image" height="389" style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" /&gt;&lt;/span&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;We have an order entity which can be placed by a customer entity. Each order can have many order line entities. Each of the three entity types is uniquely identified by a property Id (surrogate key).&lt;/p&gt;
&lt;h2&gt;The Mapping Files&lt;/h2&gt;
&lt;p&gt;We have to write one mapping file per entity. It is recommended that you always have one mapping per file. Don&amp;#39;t forget to set the &lt;strong&gt;Build Action&lt;/strong&gt; of each mapping file to &lt;strong&gt;Embedded Resource&lt;/strong&gt;. People often tend to forget it and the subsequent errors raised by NHibernate are not always obvious. Also do not forget to give the mapping files the correct name, that is *.&lt;strong&gt;hbm&lt;/strong&gt;.xml where * denotes the placeholder for the entity name.&lt;/p&gt;
&lt;p&gt;The mapping for the &lt;strong&gt;Order&lt;/strong&gt; entity might be implemented as follows&lt;/p&gt;
&lt;div class="csharpcode"&gt;
&lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;&amp;lt;?&lt;/span&gt;&lt;span class="html"&gt;xml&lt;/span&gt; &lt;span class="attr"&gt;version&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;1.0&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;encoding&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;utf-8&amp;quot;&lt;/span&gt; ?&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;hibernate-mapping&lt;/span&gt; &lt;span class="attr"&gt;xmlns&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;urn:nhibernate-mapping-2.2&amp;quot;&lt;/span&gt;&lt;/pre&gt;
&lt;pre class="alt"&gt;                   &lt;span class="attr"&gt;assembly&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;LazyLoadEagerLoad&amp;quot;&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;                   &lt;span class="attr"&gt;namespace&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;LazyLoadEagerLoad.Domain&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre class="alt"&gt;  &lt;/pre&gt;
&lt;pre&gt;  &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;class&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;Order&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;table&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;Orders&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre class="alt"&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;id&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;Id&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;      &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;generator&lt;/span&gt; &lt;span class="attr"&gt;class&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;guid&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre class="alt"&gt;    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;id&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;property&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;OrderNumber&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre class="alt"&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;property&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;OrderDate&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;    &lt;/pre&gt;
&lt;pre class="alt"&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;many-to-one&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;Customer&amp;quot;&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre class="alt"&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;set&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;OrderLines&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;cascade&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;all-delete-orphan&amp;quot;&lt;/span&gt; &lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;      &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;key&lt;/span&gt; &lt;span class="attr"&gt;column&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;OrderId&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre class="alt"&gt;      &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;one-to-many&lt;/span&gt; &lt;span class="attr"&gt;class&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;OrderLine&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;set&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre class="alt"&gt;    &lt;/pre&gt;
&lt;pre&gt;  &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;class&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre class="alt"&gt;  &lt;/pre&gt;
&lt;pre&gt;&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;hibernate-mapping&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;
&amp;lt;style type=&amp;quot;text/css&amp;quot;&amp;gt;&amp;lt;!--
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, &amp;quot;Courier New&amp;quot;, courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
--&amp;gt;&amp;lt;/style&amp;gt;
&lt;/p&gt;
&lt;p&gt;Analogous you can implement the mappings for the &lt;strong&gt;Customer&lt;/strong&gt; entity&lt;/p&gt;
&lt;div class="csharpcode"&gt;
&lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;&amp;lt;?&lt;/span&gt;&lt;span class="html"&gt;xml&lt;/span&gt; &lt;span class="attr"&gt;version&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;1.0&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;encoding&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;utf-8&amp;quot;&lt;/span&gt; ?&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;
&lt;pre&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;hibernate-mapping&lt;/span&gt; &lt;span class="attr"&gt;xmlns&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;urn:nhibernate-mapping-2.2&amp;quot;&lt;/span&gt;&lt;/pre&gt;
&lt;pre class="alt"&gt;                   &lt;span class="attr"&gt;assembly&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;LazyLoadEagerLoad&amp;quot;&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;                   &lt;span class="attr"&gt;namespace&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;LazyLoadEagerLoad.Domain&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre class="alt"&gt;  &lt;/pre&gt;
&lt;pre&gt;  &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;class&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;Customer&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre class="alt"&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;id&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;Id&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;      &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;generator&lt;/span&gt; &lt;span class="attr"&gt;class&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;guid&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre class="alt"&gt;    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;id&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;property&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;CompanyName&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre class="alt"&gt;  &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;class&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;hibernate-mapping&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;
&amp;lt;style type=&amp;quot;text/css&amp;quot;&amp;gt;&amp;lt;!--
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, &amp;quot;Courier New&amp;quot;, courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
--&amp;gt;&amp;lt;/style&amp;gt;
&lt;/p&gt;
&lt;p&gt;and finally the mapping for the &lt;strong&gt;OrderLine&lt;/strong&gt; entity.&lt;/p&gt;
&lt;div class="csharpcode"&gt;
&lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;&amp;lt;?&lt;/span&gt;&lt;span class="html"&gt;xml&lt;/span&gt; &lt;span class="attr"&gt;version&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;1.0&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;encoding&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;utf-8&amp;quot;&lt;/span&gt; ?&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;
&lt;pre&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;hibernate-mapping&lt;/span&gt; &lt;span class="attr"&gt;xmlns&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;urn:nhibernate-mapping-2.2&amp;quot;&lt;/span&gt;&lt;/pre&gt;
&lt;pre class="alt"&gt;                   &lt;span class="attr"&gt;assembly&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;LazyLoadEagerLoad&amp;quot;&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;                   &lt;span class="attr"&gt;namespace&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;LazyLoadEagerLoad.Domain&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre class="alt"&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre&gt;  &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;class&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;OrderLine&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre class="alt"&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;id&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;Id&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;      &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;generator&lt;/span&gt; &lt;span class="attr"&gt;class&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;guid&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre class="alt"&gt;    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;id&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;property&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;Amount&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre class="alt"&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;property&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;ProductName&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;  &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;class&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre class="alt"&gt;  &lt;/pre&gt;
&lt;pre&gt;&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;hibernate-mapping&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;
&amp;lt;style type=&amp;quot;text/css&amp;quot;&amp;gt;&amp;lt;!--
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, &amp;quot;Courier New&amp;quot;, courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
--&amp;gt;&amp;lt;/style&amp;gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;Testing the Mapping&lt;/h2&gt;
&lt;p&gt;To test the mapping we use the following test method&lt;/p&gt;
&lt;div class="csharpcode"&gt;
&lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; LazyLoadEagerLoad.Domain;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; NHibernate.Cfg;&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; NHibernate.Tool.hbm2ddl;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; NUnit.Framework;&lt;/pre&gt;
&lt;pre class="alt"&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="kwrd"&gt;namespace&lt;/span&gt; LazyLoadEagerLoad.Tests&lt;/pre&gt;
&lt;pre class="alt"&gt;{&lt;/pre&gt;
&lt;pre&gt;    [TestFixture]&lt;/pre&gt;
&lt;pre class="alt"&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; GenerateSchema_Fixture&lt;/pre&gt;
&lt;pre&gt;    {&lt;/pre&gt;
&lt;pre class="alt"&gt;        [Test]&lt;/pre&gt;
&lt;pre&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Can_generate_schema()&lt;/pre&gt;
&lt;pre class="alt"&gt;        {&lt;/pre&gt;
&lt;pre&gt;            var cfg = &lt;span class="kwrd"&gt;new&lt;/span&gt; Configuration();&lt;/pre&gt;
&lt;pre class="alt"&gt;            cfg.Configure();&lt;/pre&gt;
&lt;pre&gt;            cfg.AddAssembly(&lt;span class="kwrd"&gt;typeof&lt;/span&gt;(Order).Assembly);&lt;/pre&gt;
&lt;pre class="alt"&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre&gt;            &lt;span class="kwrd"&gt;new&lt;/span&gt; SchemaExport(cfg).Execute(&lt;span class="kwrd"&gt;false&lt;/span&gt;, &lt;span class="kwrd"&gt;true&lt;/span&gt;, &lt;span class="kwrd"&gt;false&lt;/span&gt;, &lt;span class="kwrd"&gt;false&lt;/span&gt;);&lt;/pre&gt;
&lt;pre class="alt"&gt;        }&lt;/pre&gt;
&lt;pre&gt;    }&lt;/pre&gt;
&lt;pre class="alt"&gt;}&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;
&amp;lt;style type=&amp;quot;text/css&amp;quot;&amp;gt;&amp;lt;!--
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, &amp;quot;Courier New&amp;quot;, courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
--&amp;gt;&amp;lt;/style&amp;gt;
First we create a new instance of the NHibernate Configuration class and tell it to configure itself. Since we don&amp;#39;t provide any explicit configuration here in the code NHibernate looks out for an adequate configuration file. I have included such a file (called hibernate.cfg.xml) in my project. Please consult &lt;a href="http://blogs.hibernatingrhinos.com/nhibernate/archive/2008/04/01/your-first-nhibernate-based-application.aspx"&gt;this&lt;/a&gt; previous post for further details about the configuration file. 
&lt;/p&gt;
&lt;h2&gt;Testing the Loading Behavior of NHibernate&lt;/h2&gt;
&lt;h3&gt;Defining a base class for our tests&lt;/h3&gt;
&lt;p&gt;To avoid repetitive task (&lt;a href="http://en.wikipedia.org/wiki/Don&amp;#39;t_repeat_yourself"&gt;DRY&lt;/a&gt; principle) we implement the following base class.&lt;/p&gt;
&lt;div class="csharpcode"&gt;
&lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; LazyLoadEagerLoad.Domain;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; NHibernate;&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; NHibernate.Cfg;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; NHibernate.Tool.hbm2ddl;&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; NUnit.Framework;&lt;/pre&gt;
&lt;pre&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;namespace&lt;/span&gt; LazyLoadEagerLoad.Tests&lt;/pre&gt;
&lt;pre&gt;{&lt;/pre&gt;
&lt;pre class="alt"&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; TestFixtureBase&lt;/pre&gt;
&lt;pre&gt;    {&lt;/pre&gt;
&lt;pre class="alt"&gt;        &lt;span class="kwrd"&gt;private&lt;/span&gt; Configuration _configuration;&lt;/pre&gt;
&lt;pre&gt;        &lt;span class="kwrd"&gt;private&lt;/span&gt; ISessionFactory _sessionFactory;&lt;/pre&gt;
&lt;pre class="alt"&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre&gt;        &lt;span class="kwrd"&gt;protected&lt;/span&gt; ISessionFactory SessionFactory&lt;/pre&gt;
&lt;pre class="alt"&gt;        {&lt;/pre&gt;
&lt;pre&gt;            get { &lt;span class="kwrd"&gt;return&lt;/span&gt; _sessionFactory; }&lt;/pre&gt;
&lt;pre class="alt"&gt;        }&lt;/pre&gt;
&lt;pre&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre class="alt"&gt;        [TestFixtureSetUp]&lt;/pre&gt;
&lt;pre&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; TestFixtureSetUp()&lt;/pre&gt;
&lt;pre class="alt"&gt;        {&lt;/pre&gt;
&lt;pre&gt;            _configuration = &lt;span class="kwrd"&gt;new&lt;/span&gt; Configuration();&lt;/pre&gt;
&lt;pre class="alt"&gt;            _configuration.Configure();&lt;/pre&gt;
&lt;pre&gt;            _configuration.AddAssembly(&lt;span class="kwrd"&gt;typeof&lt;/span&gt;(Customer).Assembly);&lt;/pre&gt;
&lt;pre class="alt"&gt;            _sessionFactory = _configuration.BuildSessionFactory();&lt;/pre&gt;
&lt;pre&gt;        }&lt;/pre&gt;
&lt;pre class="alt"&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre&gt;        [TestFixtureTearDown]&lt;/pre&gt;
&lt;pre class="alt"&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; TestFixtureTearDown()&lt;/pre&gt;
&lt;pre&gt;        {&lt;/pre&gt;
&lt;pre class="alt"&gt;            _sessionFactory.Close();&lt;/pre&gt;
&lt;pre&gt;        }&lt;/pre&gt;
&lt;pre class="alt"&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre&gt;        [SetUp]&lt;/pre&gt;
&lt;pre class="alt"&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; SetupContext()&lt;/pre&gt;
&lt;pre&gt;        {&lt;/pre&gt;
&lt;pre class="alt"&gt;            &lt;span class="kwrd"&gt;new&lt;/span&gt; SchemaExport(_configuration).Execute(&lt;span class="kwrd"&gt;false&lt;/span&gt;, &lt;span class="kwrd"&gt;true&lt;/span&gt;, &lt;span class="kwrd"&gt;false&lt;/span&gt;, &lt;span class="kwrd"&gt;false&lt;/span&gt;);&lt;/pre&gt;
&lt;pre&gt;            Before_each_test();&lt;/pre&gt;
&lt;pre class="alt"&gt;        }&lt;/pre&gt;
&lt;pre&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre class="alt"&gt;        [TearDown]&lt;/pre&gt;
&lt;pre&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; TearDownContext()&lt;/pre&gt;
&lt;pre class="alt"&gt;        {&lt;/pre&gt;
&lt;pre&gt;            After_each_test();&lt;/pre&gt;
&lt;pre class="alt"&gt;        }&lt;/pre&gt;
&lt;pre&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre class="alt"&gt;        &lt;span class="kwrd"&gt;protected&lt;/span&gt; &lt;span class="kwrd"&gt;virtual&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Before_each_test()&lt;/pre&gt;
&lt;pre&gt;        { }&lt;/pre&gt;
&lt;pre class="alt"&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre&gt;        &lt;span class="kwrd"&gt;protected&lt;/span&gt; &lt;span class="kwrd"&gt;virtual&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; After_each_test()&lt;/pre&gt;
&lt;pre class="alt"&gt;        { }&lt;/pre&gt;
&lt;pre&gt;    }&lt;/pre&gt;
&lt;pre class="alt"&gt;}&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;When the test fixture is started, the base class configures NHibernate and creates a session factory (&lt;strong&gt;TestFixtureSetUp&lt;/strong&gt;). When the whole test fixture is ended the session factory is closed (&lt;strong&gt;TestFixtureTearDown&lt;/strong&gt;).&lt;/p&gt;
&lt;p&gt;Before each test in the fixture is run the database schema is (re-) created and the virtual &lt;strong&gt;Before_each_test&lt;/strong&gt; method is called. After each test in the fixture is finished the virtual &lt;strong&gt;After_each_test&lt;/strong&gt; method is called. The two virtual methods can (but must not necessarily) be overridden in a child class.
&amp;lt;style type=&amp;quot;text/css&amp;quot;&amp;gt;&amp;lt;!--
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, &amp;quot;Courier New&amp;quot;, courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
--&amp;gt;&amp;lt;/style&amp;gt;
&lt;/p&gt;
&lt;p&gt;All our test fixtures we implement will derive from this base class.&lt;/p&gt;
&lt;h3&gt;Filling the database with test data&lt;/h3&gt;
&lt;p&gt;To be able to test the loading behavior of NHibernate we need some test data in our database. We create this test data every time a test is run (just after the database schema is re-created). We add a new class &lt;strong&gt;Order_Fixture&lt;/strong&gt; to our test project and inherit from the &lt;strong&gt;TestFixtureBase&lt;/strong&gt; base class. Then we override the Before_each_test method and call a helper method which creates our initial data. We create just the absolute minimum of data we need (again --&amp;gt;DRY). That is: one customer placing one order with two order lines.&lt;/p&gt;
&lt;div class="csharpcode"&gt;
&lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; LazyLoadEagerLoad.Domain;&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; NHibernate;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; NHibernate.Criterion;&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; NHibernate.SqlCommand;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; NUnit.Framework;&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; Order=LazyLoadEagerLoad.Domain.Order;&lt;/pre&gt;
&lt;pre&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;namespace&lt;/span&gt; LazyLoadEagerLoad.Tests&lt;/pre&gt;
&lt;pre&gt;{&lt;/pre&gt;
&lt;pre class="alt"&gt;    [TestFixture]&lt;/pre&gt;
&lt;pre&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; Order_Fixture : TestFixtureBase&lt;/pre&gt;
&lt;pre class="alt"&gt;    {&lt;/pre&gt;
&lt;pre&gt;        &lt;span class="kwrd"&gt;private&lt;/span&gt; Order _order;&lt;/pre&gt;
&lt;pre class="alt"&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre&gt;        &lt;span class="kwrd"&gt;protected&lt;/span&gt; &lt;span class="kwrd"&gt;override&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Before_each_test()&lt;/pre&gt;
&lt;pre class="alt"&gt;        {&lt;/pre&gt;
&lt;pre&gt;            &lt;span class="kwrd"&gt;base&lt;/span&gt;.Before_each_test();&lt;/pre&gt;
&lt;pre class="alt"&gt;            CreateInitialData();&lt;/pre&gt;
&lt;pre&gt;        }&lt;/pre&gt;
&lt;pre class="alt"&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre&gt;        &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; CreateInitialData()&lt;/pre&gt;
&lt;pre class="alt"&gt;        {&lt;/pre&gt;
&lt;pre&gt;            &lt;span class="rem"&gt;// create a single customer and an order with two order lines for this customer&lt;/span&gt;&lt;/pre&gt;
&lt;pre class="alt"&gt;            var customer = &lt;span class="kwrd"&gt;new&lt;/span&gt; Customer {CompanyName = &lt;span class="str"&gt;&amp;quot;IBM&amp;quot;&lt;/span&gt;};&lt;/pre&gt;
&lt;pre&gt;            var line1 = &lt;span class="kwrd"&gt;new&lt;/span&gt; OrderLine {Amount = 5, ProductName = &lt;span class="str"&gt;&amp;quot;Laptop XYZ&amp;quot;&lt;/span&gt;};&lt;/pre&gt;
&lt;pre class="alt"&gt;            var line2 = &lt;span class="kwrd"&gt;new&lt;/span&gt; OrderLine {Amount = 2, ProductName = &lt;span class="str"&gt;&amp;quot;Desktop PC A100&amp;quot;&lt;/span&gt;};&lt;/pre&gt;
&lt;pre&gt;            _order = &lt;span class="kwrd"&gt;new&lt;/span&gt; Order&lt;/pre&gt;
&lt;pre class="alt"&gt;                        {&lt;/pre&gt;
&lt;pre&gt;                            OrderNumber = &lt;span class="str"&gt;&amp;quot;o-100-001&amp;quot;&lt;/span&gt;,&lt;/pre&gt;
&lt;pre class="alt"&gt;                            OrderDate = DateTime.Today,&lt;/pre&gt;
&lt;pre&gt;                            Customer = customer&lt;/pre&gt;
&lt;pre class="alt"&gt;                        };&lt;/pre&gt;
&lt;pre&gt;            _order.OrderLines.Add(line1);&lt;/pre&gt;
&lt;pre class="alt"&gt;            _order.OrderLines.Add(line2);&lt;/pre&gt;
&lt;pre&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre class="alt"&gt;            &lt;span class="kwrd"&gt;using&lt;/span&gt; (ISession session = SessionFactory.OpenSession())&lt;/pre&gt;
&lt;pre&gt;                &lt;span class="kwrd"&gt;using&lt;/span&gt; (ITransaction transaction = session.BeginTransaction())&lt;/pre&gt;
&lt;pre class="alt"&gt;                {&lt;/pre&gt;
&lt;pre&gt;                    session.Save(customer);&lt;/pre&gt;
&lt;pre class="alt"&gt;                    session.Save(_order);&lt;/pre&gt;
&lt;pre&gt;                    transaction.Commit();&lt;/pre&gt;
&lt;pre class="alt"&gt;                }&lt;/pre&gt;
&lt;pre&gt;        }&lt;/pre&gt;
&lt;pre class="alt"&gt;    }&lt;/pre&gt;
&lt;pre&gt;}&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;
&amp;lt;style type=&amp;quot;text/css&amp;quot;&amp;gt;&amp;lt;!--
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, &amp;quot;Courier New&amp;quot;, courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
--&amp;gt;&amp;lt;/style&amp;gt;
&lt;/p&gt;
&lt;p&gt;The &lt;strong&gt;CreateInitialData&lt;/strong&gt; method is run before each test. With this we guarantee that each test is side effects free.&lt;/p&gt;
&lt;h3&gt;Verifying the default behavior - Lazy Loading&lt;/h3&gt;
&lt;p&gt;When loading an order entity from database the default behavior of NHibernate is to lazy load all associated objects of the order entity. Let&amp;#39;s write a test to verify this. For the verification we use a utility class provided by NHibernate (NHibernateUtil) which can test whether an associated object or object collection is initialized (i.e. loaded) or not. The class can also force the initialization of an un-initialized relation.&lt;/p&gt;
&lt;div class="csharpcode"&gt;
&lt;pre class="alt"&gt;[Test]&lt;/pre&gt;
&lt;pre&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Customer_and_OrderLines_are_not_loaded_when_loading_Order()&lt;/pre&gt;
&lt;pre class="alt"&gt;{&lt;/pre&gt;
&lt;pre&gt;    Order fromDb;&lt;/pre&gt;
&lt;pre class="alt"&gt;    &lt;span class="kwrd"&gt;using&lt;/span&gt; (ISession session = SessionFactory.OpenSession())&lt;/pre&gt;
&lt;pre&gt;        fromDb = session.Get&amp;lt;Order&amp;gt;(_order.Id);&lt;/pre&gt;
&lt;pre class="alt"&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre&gt;    Assert.IsFalse(NHibernateUtil.IsInitialized(fromDb.Customer));&lt;/pre&gt;
&lt;pre class="alt"&gt;    Assert.IsFalse(NHibernateUtil.IsInitialized(fromDb.OrderLines));&lt;/pre&gt;
&lt;pre&gt;}&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;
&amp;lt;style type=&amp;quot;text/css&amp;quot;&amp;gt;&amp;lt;!--
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, &amp;quot;Courier New&amp;quot;, courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
--&amp;gt;&amp;lt;/style&amp;gt;
&lt;/p&gt;
&lt;p&gt;The test succeeds and NHibernate generates SQL similar to this one&lt;/p&gt;
&lt;div class="csharpcode"&gt;
&lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;SELECT&lt;/span&gt;    order0_.Id &lt;span class="kwrd"&gt;as&lt;/span&gt; Id0_0_, &lt;/pre&gt;
&lt;pre&gt;    order0_.OrderNumber &lt;span class="kwrd"&gt;as&lt;/span&gt; OrderNum2_0_0_, &lt;/pre&gt;
&lt;pre class="alt"&gt;    order0_.OrderDate &lt;span class="kwrd"&gt;as&lt;/span&gt; OrderDate0_0_, &lt;/pre&gt;
&lt;pre&gt;    order0_.CustomerId &lt;span class="kwrd"&gt;as&lt;/span&gt; CustomerId0_0_ &lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;FROM&lt;/span&gt;    Orders order0_ &lt;/pre&gt;
&lt;pre&gt;&lt;span class="kwrd"&gt;WHERE&lt;/span&gt;    order0_.Id=&lt;span class="str"&gt;&amp;#39;15bca5b3-2771-4bee-9923-85bda66318d8&amp;#39;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;
&amp;lt;style type=&amp;quot;text/css&amp;quot;&amp;gt;&amp;lt;!--
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, &amp;quot;Courier New&amp;quot;, courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
--&amp;gt;&amp;lt;/style&amp;gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Now we have a problem: If we want to access the order line items (after the session has been closed) we get an exception. Since the session is closed NHibernate cannot lazily load the order line items for us. We can show this behavior with the following test method&lt;/p&gt;
&lt;div class="csharpcode"&gt;
&lt;pre class="alt"&gt;[Test]&lt;/pre&gt;
&lt;pre&gt;[ExpectedException(&lt;span class="kwrd"&gt;typeof&lt;/span&gt;(LazyInitializationException))]&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Accessing_customer_of_order_after_session_is_closed_throws()&lt;/pre&gt;
&lt;pre&gt;{&lt;/pre&gt;
&lt;pre class="alt"&gt;    Order fromDb;&lt;/pre&gt;
&lt;pre&gt;    &lt;span class="kwrd"&gt;using&lt;/span&gt; (ISession session = SessionFactory.OpenSession())&lt;/pre&gt;
&lt;pre class="alt"&gt;        fromDb = session.Get&amp;lt;Order&amp;gt;(_order.Id);&lt;/pre&gt;
&lt;pre&gt;    &lt;/pre&gt;
&lt;pre class="alt"&gt;    &lt;span class="rem"&gt;// trying to access the Customer of the order, will throw exception&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;    &lt;span class="rem"&gt;// Note: at this point the session is already closed&lt;/span&gt;&lt;/pre&gt;
&lt;pre class="alt"&gt;    &lt;span class="kwrd"&gt;string&lt;/span&gt; name = fromDb.Customer.CompanyName;&lt;/pre&gt;
&lt;pre&gt;}&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;Note: the above test &lt;strong&gt;only&lt;/strong&gt; succeeds if the method throws the expected exception of type &lt;strong&gt;LazyInitializationException&lt;/strong&gt;. And this is just what we want to show!
&amp;lt;style type=&amp;quot;text/css&amp;quot;&amp;gt;&amp;lt;!--
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, &amp;quot;Courier New&amp;quot;, courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
--&amp;gt;&amp;lt;/style&amp;gt;
&lt;/p&gt;
&lt;p&gt;Another problem is the &lt;strong&gt;n+1 select statements problem&lt;/strong&gt;. If we access the order line items after loading the order we generate a select statement for each line item we access. Thus if we have n line items and want to access them all we generate one select statement for the order itself and n select statements for all line items (result: n+1 select statements). This can make our data fetching rather slow and put a (unnecessary) burden onto our database.&lt;/p&gt;
&lt;p&gt;We can simulate this behavior with this test method&lt;/p&gt;
&lt;div class="csharpcode"&gt;
&lt;pre class="alt"&gt;[Test]&lt;/pre&gt;
&lt;pre&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Show_n_plus_1_select_behavior()&lt;/pre&gt;
&lt;pre class="alt"&gt;{&lt;/pre&gt;
&lt;pre&gt;    &lt;span class="kwrd"&gt;using&lt;/span&gt; (ISession session = SessionFactory.OpenSession())&lt;/pre&gt;
&lt;pre class="alt"&gt;    {&lt;/pre&gt;
&lt;pre&gt;        var fromDb = session.Get&amp;lt;Order&amp;gt;(_order.Id);&lt;/pre&gt;
&lt;pre class="alt"&gt;        &lt;span class="kwrd"&gt;int&lt;/span&gt; sum = 0;&lt;/pre&gt;
&lt;pre&gt;        &lt;span class="kwrd"&gt;foreach&lt;/span&gt; (var line &lt;span class="kwrd"&gt;in&lt;/span&gt; fromDb.OrderLines)&lt;/pre&gt;
&lt;pre class="alt"&gt;        {&lt;/pre&gt;
&lt;pre&gt;            &lt;span class="rem"&gt;// just some dummy code to force loading of order line&lt;/span&gt;&lt;/pre&gt;
&lt;pre class="alt"&gt;            sum += line.Amount;&lt;/pre&gt;
&lt;pre&gt;        } &lt;/pre&gt;
&lt;pre class="alt"&gt;    }&lt;/pre&gt;
&lt;pre&gt;}&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;NHibernate will generate SQL similar to the following
&amp;lt;style type=&amp;quot;text/css&amp;quot;&amp;gt;&amp;lt;!--
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, &amp;quot;Courier New&amp;quot;, courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
--&amp;gt;&amp;lt;/style&amp;gt;
&lt;/p&gt;
&lt;div class="csharpcode"&gt;
&lt;pre class="alt"&gt;SELECT order0_.Id &lt;span class="kwrd"&gt;as&lt;/span&gt; Id3_0_, &lt;/pre&gt;
&lt;pre&gt;       order0_.OrderNumber &lt;span class="kwrd"&gt;as&lt;/span&gt; OrderNum2_3_0_, &lt;/pre&gt;
&lt;pre class="alt"&gt;       order0_.OrderDate &lt;span class="kwrd"&gt;as&lt;/span&gt; OrderDate3_0_, &lt;/pre&gt;
&lt;pre&gt;       order0_.Customer &lt;span class="kwrd"&gt;as&lt;/span&gt; Customer3_0_ &lt;/pre&gt;
&lt;pre class="alt"&gt;FROM   Orders order0_ &lt;/pre&gt;
&lt;pre&gt;WHERE  order0_.Id=&lt;span class="str"&gt;&amp;#39;5b2dbcb7-d0bf-4c53-86aa-8cd40cb5061a&amp;#39;&lt;/span&gt;&lt;/pre&gt;
&lt;pre class="alt"&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre&gt;SELECT orderlines0_.OrderId &lt;span class="kwrd"&gt;as&lt;/span&gt; OrderId1_, &lt;/pre&gt;
&lt;pre class="alt"&gt;       orderlines0_.Id &lt;span class="kwrd"&gt;as&lt;/span&gt; Id1_, &lt;/pre&gt;
&lt;pre&gt;       orderlines0_.Id &lt;span class="kwrd"&gt;as&lt;/span&gt; Id4_0_, &lt;/pre&gt;
&lt;pre class="alt"&gt;       orderlines0_.Amount &lt;span class="kwrd"&gt;as&lt;/span&gt; Amount4_0_, &lt;/pre&gt;
&lt;pre&gt;       orderlines0_.ProductName &lt;span class="kwrd"&gt;as&lt;/span&gt; ProductN3_4_0_ &lt;/pre&gt;
&lt;pre class="alt"&gt;FROM   OrderLine orderlines0_ &lt;/pre&gt;
&lt;pre&gt;WHERE  orderlines0_.OrderId=&lt;span class="str"&gt;&amp;#39;5b2dbcb7-d0bf-4c53-86aa-8cd40cb5061a&amp;#39;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;
&amp;lt;style type=&amp;quot;text/css&amp;quot;&amp;gt;&amp;lt;!--
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, &amp;quot;Courier New&amp;quot;, courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
--&amp;gt;&amp;lt;/style&amp;gt;
&lt;/p&gt;
&lt;p&gt;This time we have been lucky! NHibernate has automatically generated an optimized query for us and has loaded the 2 order line items in one go. But this is not always the case! Imagine having a collection with several 100 items and you only need to access one or two of them. It would be a waste of resources to always load all items.&lt;/p&gt;
&lt;p&gt;But fortunately we have a solution for these kind of problems with NHibernate. It&amp;#39;s called eagerly loading.&lt;/p&gt;
&lt;h3&gt;Eagerly loading with the NHibernateUtil class&lt;/h3&gt;
&lt;p&gt;If you know you need have access to related objects of the order entity you can use the &lt;strong&gt;NHibernateUtil&lt;/strong&gt; class to initialize the related objects (that is: to fetch them from the database). Have a look at this test methods&lt;/p&gt;
&lt;div class="csharpcode"&gt;
&lt;pre class="alt"&gt;[Test]&lt;/pre&gt;
&lt;pre&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Can_initialize_customer_of_order_with_nhibernate_util()&lt;/pre&gt;
&lt;pre class="alt"&gt;{&lt;/pre&gt;
&lt;pre&gt;    Order fromDb;&lt;/pre&gt;
&lt;pre class="alt"&gt;    &lt;span class="kwrd"&gt;using&lt;/span&gt; (ISession session = SessionFactory.OpenSession())&lt;/pre&gt;
&lt;pre&gt;    {&lt;/pre&gt;
&lt;pre class="alt"&gt;        fromDb = session.Get&amp;lt;Order&amp;gt;(_order.Id);&lt;/pre&gt;
&lt;pre&gt;        NHibernateUtil.Initialize(fromDb.Customer);&lt;/pre&gt;
&lt;pre class="alt"&gt;    }&lt;/pre&gt;
&lt;pre&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre class="alt"&gt;    Assert.IsTrue(NHibernateUtil.IsInitialized(fromDb.Customer));&lt;/pre&gt;
&lt;pre&gt;    Assert.IsFalse(NHibernateUtil.IsInitialized(fromDb.OrderLines));&lt;/pre&gt;
&lt;pre class="alt"&gt;}&lt;/pre&gt;
&lt;pre&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre class="alt"&gt;[Test]&lt;/pre&gt;
&lt;pre&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Can_initialize_order_lines_of_order_with_nhibernate_util()&lt;/pre&gt;
&lt;pre class="alt"&gt;{&lt;/pre&gt;
&lt;pre&gt;    Order fromDb;&lt;/pre&gt;
&lt;pre class="alt"&gt;    &lt;span class="kwrd"&gt;using&lt;/span&gt; (ISession session = SessionFactory.OpenSession())&lt;/pre&gt;
&lt;pre&gt;    {&lt;/pre&gt;
&lt;pre class="alt"&gt;        fromDb = session.Get&amp;lt;Order&amp;gt;(_order.Id);&lt;/pre&gt;
&lt;pre&gt;        NHibernateUtil.Initialize(fromDb.OrderLines);&lt;/pre&gt;
&lt;pre class="alt"&gt;    }&lt;/pre&gt;
&lt;pre&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre class="alt"&gt;    Assert.IsFalse(NHibernateUtil.IsInitialized(fromDb.Customer));&lt;/pre&gt;
&lt;pre&gt;    Assert.IsTrue(NHibernateUtil.IsInitialized(fromDb.OrderLines));&lt;/pre&gt;
&lt;pre class="alt"&gt;}&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;
&amp;lt;style type=&amp;quot;text/css&amp;quot;&amp;gt;&amp;lt;!--
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, &amp;quot;Courier New&amp;quot;, courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
--&amp;gt;&amp;lt;/style&amp;gt;
&lt;/p&gt;
&lt;p&gt;With this utility class you can initialize single objects as well as collection of objects. In each case NHibernate will send 2 select statements to the database. One to select the order and one to initialize the related object(s).&lt;/p&gt;
&lt;h3&gt;Eagerly loading with HQL&lt;/h3&gt;
&lt;p&gt;If you know that you want to load all order items of a given order then you can tell NHibernate to do so and eagerly load all order lines together with the order in one go. The following test method shows how you can formulate a HQL query which not only loads the order but also the associated customer and order lines.&lt;/p&gt;
&lt;div class="csharpcode"&gt;
&lt;pre class="alt"&gt;[Test]&lt;/pre&gt;
&lt;pre&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Can_eagerly_load_order_aggregate_with_hql_query()&lt;/pre&gt;
&lt;pre class="alt"&gt;{&lt;/pre&gt;
&lt;pre&gt;    Order fromDb;&lt;/pre&gt;
&lt;pre class="alt"&gt;    &lt;span class="kwrd"&gt;using&lt;/span&gt; (ISession session = SessionFactory.OpenSession())&lt;/pre&gt;
&lt;pre&gt;    {&lt;/pre&gt;
&lt;pre class="alt"&gt;        &lt;span class="kwrd"&gt;string&lt;/span&gt; sql = &lt;span class="str"&gt;&amp;quot;from Order o&amp;quot;&lt;/span&gt; +&lt;/pre&gt;
&lt;pre&gt;                     &lt;span class="str"&gt;&amp;quot; inner join fetch o.OrderLines&amp;quot;&lt;/span&gt; +&lt;/pre&gt;
&lt;pre class="alt"&gt;                     &lt;span class="str"&gt;&amp;quot; inner join fetch o.Customer&amp;quot;&lt;/span&gt; +&lt;/pre&gt;
&lt;pre&gt;                     &lt;span class="str"&gt;&amp;quot; where o.Id=:id&amp;quot;&lt;/span&gt;;&lt;/pre&gt;
&lt;pre class="alt"&gt;        fromDb = session.CreateQuery(sql)&lt;/pre&gt;
&lt;pre&gt;                        .SetGuid(&lt;span class="str"&gt;&amp;quot;id&amp;quot;&lt;/span&gt;, _order.Id)&lt;/pre&gt;
&lt;pre class="alt"&gt;                        .UniqueResult&amp;lt;Order&amp;gt;();&lt;/pre&gt;
&lt;pre&gt;    }&lt;/pre&gt;
&lt;pre class="alt"&gt;    Assert.IsTrue(NHibernateUtil.IsInitialized(fromDb.Customer));&lt;/pre&gt;
&lt;pre&gt;    Assert.IsTrue(NHibernateUtil.IsInitialized(fromDb.OrderLines));&lt;/pre&gt;
&lt;pre class="alt"&gt;}&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;
&amp;lt;style type=&amp;quot;text/css&amp;quot;&amp;gt;&amp;lt;!--
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, &amp;quot;Courier New&amp;quot;, courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
--&amp;gt;&amp;lt;/style&amp;gt;
&lt;/p&gt;
&lt;p&gt;The resulting sql generated by NHibernate is then similar to this one&lt;/p&gt;
&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;select&lt;/span&gt;      order0_.Id &lt;span class="kwrd"&gt;as&lt;/span&gt; Id0_0_, 
            orderlines1_.Id &lt;span class="kwrd"&gt;as&lt;/span&gt; Id1_1_, 
            customer2_.Id &lt;span class="kwrd"&gt;as&lt;/span&gt; Id2_2_, 
            order0_.OrderNumber &lt;span class="kwrd"&gt;as&lt;/span&gt; OrderNum2_0_0_, 
            order0_.OrderDate &lt;span class="kwrd"&gt;as&lt;/span&gt; OrderDate0_0_, 
            order0_.CustomerId &lt;span class="kwrd"&gt;as&lt;/span&gt; CustomerId0_0_, 
            orderlines1_.Amount &lt;span class="kwrd"&gt;as&lt;/span&gt; Amount1_1_, 
            orderlines1_.ProductName &lt;span class="kwrd"&gt;as&lt;/span&gt; ProductN3_1_1_, 
            customer2_.CompanyName &lt;span class="kwrd"&gt;as&lt;/span&gt; CompanyN2_2_2_, 
            orderlines1_.OrderId &lt;span class="kwrd"&gt;as&lt;/span&gt; OrderId0__, 
            orderlines1_.Id &lt;span class="kwrd"&gt;as&lt;/span&gt; Id0__ 
&lt;span class="kwrd"&gt;from&lt;/span&gt;        Orders order0_ 
&lt;span class="kwrd"&gt;inner&lt;/span&gt; &lt;span class="kwrd"&gt;join&lt;/span&gt;  OrderLine orderlines1_ &lt;span class="kwrd"&gt;on&lt;/span&gt; order0_.Id=orderlines1_.OrderId 
&lt;span class="kwrd"&gt;inner&lt;/span&gt; &lt;span class="kwrd"&gt;join&lt;/span&gt;  Customer customer2_ &lt;span class="kwrd"&gt;on&lt;/span&gt; order0_.CustomerId=customer2_.Id 
&lt;span class="kwrd"&gt;where&lt;/span&gt;       order0_.Id=&lt;span class="str"&gt;&amp;#39;409ebd99-3206-459b-bfed-6df989284da9&amp;#39;&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;
&amp;lt;style type=&amp;quot;text/css&amp;quot;&amp;gt;&amp;lt;!--
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, &amp;quot;Courier New&amp;quot;, courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
--&amp;gt;&amp;lt;/style&amp;gt;
&lt;/p&gt;
&lt;p&gt;NHibernate has created an SQL select statement which joins the 3 tables involved, namely &lt;strong&gt;Orders&lt;/strong&gt;, &lt;strong&gt;Customer&lt;/strong&gt; and &lt;strong&gt;OrderLine&lt;/strong&gt;. The returned (flat) set of records is then used by NHibernate to build up the object tree with the order entity as a root.&lt;/p&gt;
&lt;h2&gt;Aggregates in the Domain&lt;/h2&gt;
&lt;p&gt;DDD defines the concept of &lt;a href="http://domaindrivendesign.org/discussion/messageboardarchive/Aggregates.html"&gt;aggregates&lt;/a&gt;. A short definition of an aggregate is &amp;quot;&lt;em&gt;A cluster of associated objects that are treated as a unit for the purpose of data changes.&amp;quot;. &lt;/em&gt;An aggregate always has a &lt;em&gt;root&lt;/em&gt;.&lt;em&gt;&amp;nbsp;&lt;/em&gt;In this context we can define the following aggregate in our domain&lt;/p&gt;
&lt;p&gt;&lt;a href="/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/nhibernate/image_5F00_8.png"&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" alt="image" src="/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/nhibernate/image_5F00_thumb_5F00_3.png" width="575" border="0" height="445" /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/nhibernate/image_5F00_8.png"&gt;&lt;span style="background: SpringGreen;"&gt;&lt;img border="0" width="575" src="/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/nhibernate/image_5F00_thumb_5F00_3.png" alt="image" height="445" style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" /&gt;&lt;/span&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;The order entity is the &lt;em&gt;root&lt;/em&gt; and the order lines belong to the aggregate (can be regarded as children of the &lt;em&gt;root&lt;/em&gt;). When creating a new order or changing an existing one we only want to modify either the order itself or its order lines. We certainly do not want to change the customer entity because this would be a completely different use case and does not belong to the &lt;em&gt;order management&lt;/em&gt; use case.&lt;/p&gt;
&lt;p&gt;So, when dealing with aggregates we often want to load the complete aggregate in one go! This is the perfect example for using &lt;strong&gt;eager loading&lt;/strong&gt; techniques.&lt;/p&gt;
&lt;h2&gt;Summary&lt;/h2&gt;
&lt;p&gt;I have introduced the concept of lazy loading as provided by NHibernate. I have discussed the consequences and shown how to avoid negative side effects by using different techniques of so called eager loading.&lt;/p&gt;
&lt;p&gt;&lt;a href="/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/nhibernate/Blog-Signature-Gabriel_5F00_2.png"&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" alt="Blog Signature Gabriel" src="/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/nhibernate/Blog-Signature-Gabriel_5F00_thumb.png" width="244" border="0" height="21" /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/nhibernate/Blog-Signature-Gabriel_5F00_2.png"&gt;&lt;span style="background: SpringGreen;"&gt;&lt;img border="0" width="244" src="/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/nhibernate/Blog-Signature-Gabriel_5F00_thumb.png" alt="Blog Signature Gabriel" height="21" style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Lazy loading - eager loading</title><link>http://nhforge.org/wikis/howtonh/lazy-loading-eager-loading/revision/1.aspx</link><pubDate>Sat, 06 Sep 2008 21:48:11 GMT</pubDate><guid isPermaLink="false">45f813f2-f1c4-4eda-a619-288e3cadc793:47</guid><dc:creator>gabriel.schenker</dc:creator><comments>http://nhforge.org/wikis/howtonh/lazy-loading-eager-loading/comments.aspx</comments><description>Revision 1 posted to How to by gabriel.schenker on 06/09/2008 06:48:11 p.m.&lt;br /&gt;
&lt;p&gt;&lt;a href="/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/nhibernate/Blog-Signature-Gabriel_5F00_4.png"&gt;&lt;img style="border-right:0px;border-top:0px;border-left:0px;border-bottom:0px;" alt="Blog Signature Gabriel" src="/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/nhibernate/Blog-Signature-Gabriel_5F00_thumb_5F00_1.png" width="244" border="0" height="21" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;In this article I want to discuss the &lt;a href="http://martinfowler.com/eaaCatalog/lazyLoad.html"&gt;lazy loading&lt;/a&gt; mechanism provided by NHibernate. It is recommended for maximum flexibility to define all relations in your domain as lazy loadable. This is the default behavior of NHibernate since version 1.2. But this can lead to some undesired effects if querying your data. Let&amp;#39;s discuss these effects and how to avoid them.&lt;/p&gt;
&lt;p&gt;In my previous posts I showed &lt;a href="http://blogs.hibernatingrhinos.com/nhibernate/archive/2008/03/31/prepare-your-system-for-nhibernate.aspx"&gt;how to prepare your system for NHibernate&lt;/a&gt; and &lt;a href="/wikis/howtonh/your-first-nhibernate-based-application.aspx"&gt;how to implement a first NHibernate base application&lt;/a&gt;. This post is based on those two articles.&lt;/p&gt;
&lt;h2&gt;The Domain&lt;/h2&gt;
&lt;p&gt;Let&amp;#39;s first define a simple domain. It shows part of an order entry system. I keep this model as simple as possible (a real domain model would be more complex) but it contains all aspects we want to discuss in this post. Below is the class diagram of our model&lt;/p&gt;
&lt;p&gt;&lt;a href="/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/nhibernate/image_5F00_4.png"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" alt="image" src="/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/nhibernate/image_5F00_thumb_5F00_1.png" width="480" border="0" height="389" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;We have an order entity which can be placed by a customer entity. Each order can have many order line entities. Each of the three entity types is uniquely identified by a property Id (surrogate key).&lt;/p&gt;
&lt;h2&gt;The Mapping Files&lt;/h2&gt;
&lt;p&gt;We have to write one mapping file per entity. It is recommended that you always have one mapping per file. Don&amp;#39;t forget to set the &lt;b&gt;Build Action&lt;/b&gt; of each mapping file to &lt;b&gt;Embedded Resource&lt;/b&gt;. People often tend to forget it and the subsequent errors raised by NHibernate are not always obvious. Also do not forget to give the mapping files the correct name, that is *.&lt;b&gt;hbm&lt;/b&gt;.xml where * denotes the placeholder for the entity name.&lt;/p&gt;
&lt;p&gt;The mapping for the &lt;b&gt;Order&lt;/b&gt; entity might be implemented as follows&lt;/p&gt;
&lt;div class="csharpcode"&gt;
&lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;&amp;lt;?&lt;/span&gt;&lt;span class="html"&gt;xml&lt;/span&gt; &lt;span class="attr"&gt;version&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;1.0&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;encoding&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;utf-8&amp;quot;&lt;/span&gt; ?&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;hibernate-mapping&lt;/span&gt; &lt;span class="attr"&gt;xmlns&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;urn:nhibernate-mapping-2.2&amp;quot;&lt;/span&gt;&lt;/pre&gt;
&lt;pre class="alt"&gt;                   &lt;span class="attr"&gt;assembly&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;LazyLoadEagerLoad&amp;quot;&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;                   &lt;span class="attr"&gt;namespace&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;LazyLoadEagerLoad.Domain&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre class="alt"&gt;  &lt;/pre&gt;
&lt;pre&gt;  &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;class&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;Order&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;table&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;Orders&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre class="alt"&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;id&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;Id&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;      &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;generator&lt;/span&gt; &lt;span class="attr"&gt;class&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;guid&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre class="alt"&gt;    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;id&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;property&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;OrderNumber&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre class="alt"&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;property&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;OrderDate&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;    &lt;/pre&gt;
&lt;pre class="alt"&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;many-to-one&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;Customer&amp;quot;&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre class="alt"&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;set&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;OrderLines&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;cascade&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;all-delete-orphan&amp;quot;&lt;/span&gt; &lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;      &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;key&lt;/span&gt; &lt;span class="attr"&gt;column&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;OrderId&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre class="alt"&gt;      &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;one-to-many&lt;/span&gt; &lt;span class="attr"&gt;class&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;OrderLine&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;set&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre class="alt"&gt;    &lt;/pre&gt;
&lt;pre&gt;  &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;class&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre class="alt"&gt;  &lt;/pre&gt;
&lt;pre&gt;&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;hibernate-mapping&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;
&amp;lt;style type=&amp;quot;text/css&amp;quot;&amp;gt;&amp;lt;!--
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, &amp;quot;Courier New&amp;quot;, courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
--&amp;gt;&amp;lt;/style&amp;gt;
&lt;/p&gt;
&lt;p&gt;Analogous you can implement the mappings for the &lt;b&gt;Customer&lt;/b&gt; entity&lt;/p&gt;
&lt;div class="csharpcode"&gt;
&lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;&amp;lt;?&lt;/span&gt;&lt;span class="html"&gt;xml&lt;/span&gt; &lt;span class="attr"&gt;version&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;1.0&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;encoding&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;utf-8&amp;quot;&lt;/span&gt; ?&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;
&lt;pre&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;hibernate-mapping&lt;/span&gt; &lt;span class="attr"&gt;xmlns&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;urn:nhibernate-mapping-2.2&amp;quot;&lt;/span&gt;&lt;/pre&gt;
&lt;pre class="alt"&gt;                   &lt;span class="attr"&gt;assembly&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;LazyLoadEagerLoad&amp;quot;&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;                   &lt;span class="attr"&gt;namespace&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;LazyLoadEagerLoad.Domain&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre class="alt"&gt;  &lt;/pre&gt;
&lt;pre&gt;  &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;class&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;Customer&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre class="alt"&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;id&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;Id&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;      &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;generator&lt;/span&gt; &lt;span class="attr"&gt;class&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;guid&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre class="alt"&gt;    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;id&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;property&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;CompanyName&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre class="alt"&gt;  &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;class&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;hibernate-mapping&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;
&amp;lt;style type=&amp;quot;text/css&amp;quot;&amp;gt;&amp;lt;!--
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, &amp;quot;Courier New&amp;quot;, courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
--&amp;gt;&amp;lt;/style&amp;gt;
&lt;/p&gt;
&lt;p&gt;and finally the mapping for the &lt;b&gt;OrderLine&lt;/b&gt; entity.&lt;/p&gt;
&lt;div class="csharpcode"&gt;
&lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;&amp;lt;?&lt;/span&gt;&lt;span class="html"&gt;xml&lt;/span&gt; &lt;span class="attr"&gt;version&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;1.0&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;encoding&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;utf-8&amp;quot;&lt;/span&gt; ?&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;
&lt;pre&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;hibernate-mapping&lt;/span&gt; &lt;span class="attr"&gt;xmlns&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;urn:nhibernate-mapping-2.2&amp;quot;&lt;/span&gt;&lt;/pre&gt;
&lt;pre class="alt"&gt;                   &lt;span class="attr"&gt;assembly&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;LazyLoadEagerLoad&amp;quot;&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;                   &lt;span class="attr"&gt;namespace&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;LazyLoadEagerLoad.Domain&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre class="alt"&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre&gt;  &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;class&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;OrderLine&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre class="alt"&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;id&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;Id&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;      &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;generator&lt;/span&gt; &lt;span class="attr"&gt;class&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;guid&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre class="alt"&gt;    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;id&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;property&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;Amount&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre class="alt"&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;property&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;ProductName&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;  &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;class&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre class="alt"&gt;  &lt;/pre&gt;
&lt;pre&gt;&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;hibernate-mapping&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;
&amp;lt;style type=&amp;quot;text/css&amp;quot;&amp;gt;&amp;lt;!--
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, &amp;quot;Courier New&amp;quot;, courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
--&amp;gt;&amp;lt;/style&amp;gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;Testing the Mapping&lt;/h2&gt;
&lt;p&gt;To test the mapping we use the following test method&lt;/p&gt;
&lt;div class="csharpcode"&gt;
&lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; LazyLoadEagerLoad.Domain;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; NHibernate.Cfg;&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; NHibernate.Tool.hbm2ddl;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; NUnit.Framework;&lt;/pre&gt;
&lt;pre class="alt"&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="kwrd"&gt;namespace&lt;/span&gt; LazyLoadEagerLoad.Tests&lt;/pre&gt;
&lt;pre class="alt"&gt;{&lt;/pre&gt;
&lt;pre&gt;    [TestFixture]&lt;/pre&gt;
&lt;pre class="alt"&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; GenerateSchema_Fixture&lt;/pre&gt;
&lt;pre&gt;    {&lt;/pre&gt;
&lt;pre class="alt"&gt;        [Test]&lt;/pre&gt;
&lt;pre&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Can_generate_schema()&lt;/pre&gt;
&lt;pre class="alt"&gt;        {&lt;/pre&gt;
&lt;pre&gt;            var cfg = &lt;span class="kwrd"&gt;new&lt;/span&gt; Configuration();&lt;/pre&gt;
&lt;pre class="alt"&gt;            cfg.Configure();&lt;/pre&gt;
&lt;pre&gt;            cfg.AddAssembly(&lt;span class="kwrd"&gt;typeof&lt;/span&gt;(Order).Assembly);&lt;/pre&gt;
&lt;pre class="alt"&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre&gt;            &lt;span class="kwrd"&gt;new&lt;/span&gt; SchemaExport(cfg).Execute(&lt;span class="kwrd"&gt;false&lt;/span&gt;, &lt;span class="kwrd"&gt;true&lt;/span&gt;, &lt;span class="kwrd"&gt;false&lt;/span&gt;, &lt;span class="kwrd"&gt;false&lt;/span&gt;);&lt;/pre&gt;
&lt;pre class="alt"&gt;        }&lt;/pre&gt;
&lt;pre&gt;    }&lt;/pre&gt;
&lt;pre class="alt"&gt;}&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;
&amp;lt;style type=&amp;quot;text/css&amp;quot;&amp;gt;&amp;lt;!--
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, &amp;quot;Courier New&amp;quot;, courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
--&amp;gt;&amp;lt;/style&amp;gt;
First we create a new instance of the NHibernate Configuration class and tell it to configure itself. Since we don&amp;#39;t provide any explicit configuration here in the code NHibernate looks out for an adequate configuration file. I have included such a file (called hibernate.cfg.xml) in my project. Please consult &lt;a href="http://blogs.hibernatingrhinos.com/nhibernate/archive/2008/04/01/your-first-nhibernate-based-application.aspx"&gt;this&lt;/a&gt; previous post for further details about the configuration file. 
&lt;/p&gt;
&lt;h2&gt;Testing the Loading Behavior of NHibernate&lt;/h2&gt;
&lt;h3&gt;Defining a base class for our tests&lt;/h3&gt;
&lt;p&gt;To avoid repetitive task (&lt;a href="http://en.wikipedia.org/wiki/Don&amp;#39;t_repeat_yourself"&gt;DRY&lt;/a&gt; principle) we implement the following base class.&lt;/p&gt;
&lt;div class="csharpcode"&gt;
&lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; LazyLoadEagerLoad.Domain;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; NHibernate;&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; NHibernate.Cfg;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; NHibernate.Tool.hbm2ddl;&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; NUnit.Framework;&lt;/pre&gt;
&lt;pre&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;namespace&lt;/span&gt; LazyLoadEagerLoad.Tests&lt;/pre&gt;
&lt;pre&gt;{&lt;/pre&gt;
&lt;pre class="alt"&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; TestFixtureBase&lt;/pre&gt;
&lt;pre&gt;    {&lt;/pre&gt;
&lt;pre class="alt"&gt;        &lt;span class="kwrd"&gt;private&lt;/span&gt; Configuration _configuration;&lt;/pre&gt;
&lt;pre&gt;        &lt;span class="kwrd"&gt;private&lt;/span&gt; ISessionFactory _sessionFactory;&lt;/pre&gt;
&lt;pre class="alt"&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre&gt;        &lt;span class="kwrd"&gt;protected&lt;/span&gt; ISessionFactory SessionFactory&lt;/pre&gt;
&lt;pre class="alt"&gt;        {&lt;/pre&gt;
&lt;pre&gt;            get { &lt;span class="kwrd"&gt;return&lt;/span&gt; _sessionFactory; }&lt;/pre&gt;
&lt;pre class="alt"&gt;        }&lt;/pre&gt;
&lt;pre&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre class="alt"&gt;        [TestFixtureSetUp]&lt;/pre&gt;
&lt;pre&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; TestFixtureSetUp()&lt;/pre&gt;
&lt;pre class="alt"&gt;        {&lt;/pre&gt;
&lt;pre&gt;            _configuration = &lt;span class="kwrd"&gt;new&lt;/span&gt; Configuration();&lt;/pre&gt;
&lt;pre class="alt"&gt;            _configuration.Configure();&lt;/pre&gt;
&lt;pre&gt;            _configuration.AddAssembly(&lt;span class="kwrd"&gt;typeof&lt;/span&gt;(Customer).Assembly);&lt;/pre&gt;
&lt;pre class="alt"&gt;            _sessionFactory = _configuration.BuildSessionFactory();&lt;/pre&gt;
&lt;pre&gt;        }&lt;/pre&gt;
&lt;pre class="alt"&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre&gt;        [TestFixtureTearDown]&lt;/pre&gt;
&lt;pre class="alt"&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; TestFixtureTearDown()&lt;/pre&gt;
&lt;pre&gt;        {&lt;/pre&gt;
&lt;pre class="alt"&gt;            _sessionFactory.Close();&lt;/pre&gt;
&lt;pre&gt;        }&lt;/pre&gt;
&lt;pre class="alt"&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre&gt;        [SetUp]&lt;/pre&gt;
&lt;pre class="alt"&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; SetupContext()&lt;/pre&gt;
&lt;pre&gt;        {&lt;/pre&gt;
&lt;pre class="alt"&gt;            &lt;span class="kwrd"&gt;new&lt;/span&gt; SchemaExport(_configuration).Execute(&lt;span class="kwrd"&gt;false&lt;/span&gt;, &lt;span class="kwrd"&gt;true&lt;/span&gt;, &lt;span class="kwrd"&gt;false&lt;/span&gt;, &lt;span class="kwrd"&gt;false&lt;/span&gt;);&lt;/pre&gt;
&lt;pre&gt;            Before_each_test();&lt;/pre&gt;
&lt;pre class="alt"&gt;        }&lt;/pre&gt;
&lt;pre&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre class="alt"&gt;        [TearDown]&lt;/pre&gt;
&lt;pre&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; TearDownContext()&lt;/pre&gt;
&lt;pre class="alt"&gt;        {&lt;/pre&gt;
&lt;pre&gt;            After_each_test();&lt;/pre&gt;
&lt;pre class="alt"&gt;        }&lt;/pre&gt;
&lt;pre&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre class="alt"&gt;        &lt;span class="kwrd"&gt;protected&lt;/span&gt; &lt;span class="kwrd"&gt;virtual&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Before_each_test()&lt;/pre&gt;
&lt;pre&gt;        { }&lt;/pre&gt;
&lt;pre class="alt"&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre&gt;        &lt;span class="kwrd"&gt;protected&lt;/span&gt; &lt;span class="kwrd"&gt;virtual&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; After_each_test()&lt;/pre&gt;
&lt;pre class="alt"&gt;        { }&lt;/pre&gt;
&lt;pre&gt;    }&lt;/pre&gt;
&lt;pre class="alt"&gt;}&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;When the test fixture is started, the base class configures NHibernate and creates a session factory (&lt;b&gt;TestFixtureSetUp&lt;/b&gt;). When the whole test fixture is ended the session factory is closed (&lt;b&gt;TestFixtureTearDown&lt;/b&gt;).&lt;/p&gt;
&lt;p&gt;Before each test in the fixture is run the database schema is (re-) created and the virtual &lt;b&gt;Before_each_test&lt;/b&gt; method is called. After each test in the fixture is finished the virtual &lt;b&gt;After_each_test&lt;/b&gt; method is called. The two virtual methods can (but must not necessarily) be overridden in a child class.
&amp;lt;style type=&amp;quot;text/css&amp;quot;&amp;gt;&amp;lt;!--
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, &amp;quot;Courier New&amp;quot;, courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
--&amp;gt;&amp;lt;/style&amp;gt;
&lt;/p&gt;
&lt;p&gt;All our test fixtures we implement will derive from this base class.&lt;/p&gt;
&lt;h3&gt;Filling the database with test data&lt;/h3&gt;
&lt;p&gt;To be able to test the loading behavior of NHibernate we need some test data in our database. We create this test data every time a test is run (just after the database schema is re-created). We add a new class &lt;b&gt;Order_Fixture&lt;/b&gt; to our test project and inherit from the &lt;b&gt;TestFixtureBase&lt;/b&gt; base class. Then we override the Before_each_test method and call a helper method which creates our initial data. We create just the absolute minimum of data we need (again --&amp;gt;DRY). That is: one customer placing one order with two order lines.&lt;/p&gt;
&lt;div class="csharpcode"&gt;
&lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; LazyLoadEagerLoad.Domain;&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; NHibernate;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; NHibernate.Criterion;&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; NHibernate.SqlCommand;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; NUnit.Framework;&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; Order=LazyLoadEagerLoad.Domain.Order;&lt;/pre&gt;
&lt;pre&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;namespace&lt;/span&gt; LazyLoadEagerLoad.Tests&lt;/pre&gt;
&lt;pre&gt;{&lt;/pre&gt;
&lt;pre class="alt"&gt;    [TestFixture]&lt;/pre&gt;
&lt;pre&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; Order_Fixture : TestFixtureBase&lt;/pre&gt;
&lt;pre class="alt"&gt;    {&lt;/pre&gt;
&lt;pre&gt;        &lt;span class="kwrd"&gt;private&lt;/span&gt; Order _order;&lt;/pre&gt;
&lt;pre class="alt"&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre&gt;        &lt;span class="kwrd"&gt;protected&lt;/span&gt; &lt;span class="kwrd"&gt;override&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Before_each_test()&lt;/pre&gt;
&lt;pre class="alt"&gt;        {&lt;/pre&gt;
&lt;pre&gt;            &lt;span class="kwrd"&gt;base&lt;/span&gt;.Before_each_test();&lt;/pre&gt;
&lt;pre class="alt"&gt;            CreateInitialData();&lt;/pre&gt;
&lt;pre&gt;        }&lt;/pre&gt;
&lt;pre class="alt"&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre&gt;        &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; CreateInitialData()&lt;/pre&gt;
&lt;pre class="alt"&gt;        {&lt;/pre&gt;
&lt;pre&gt;            &lt;span class="rem"&gt;// create a single customer and an order with two order lines for this customer&lt;/span&gt;&lt;/pre&gt;
&lt;pre class="alt"&gt;            var customer = &lt;span class="kwrd"&gt;new&lt;/span&gt; Customer {CompanyName = &lt;span class="str"&gt;&amp;quot;IBM&amp;quot;&lt;/span&gt;};&lt;/pre&gt;
&lt;pre&gt;            var line1 = &lt;span class="kwrd"&gt;new&lt;/span&gt; OrderLine {Amount = 5, ProductName = &lt;span class="str"&gt;&amp;quot;Laptop XYZ&amp;quot;&lt;/span&gt;};&lt;/pre&gt;
&lt;pre class="alt"&gt;            var line2 = &lt;span class="kwrd"&gt;new&lt;/span&gt; OrderLine {Amount = 2, ProductName = &lt;span class="str"&gt;&amp;quot;Desktop PC A100&amp;quot;&lt;/span&gt;};&lt;/pre&gt;
&lt;pre&gt;            _order = &lt;span class="kwrd"&gt;new&lt;/span&gt; Order&lt;/pre&gt;
&lt;pre class="alt"&gt;                        {&lt;/pre&gt;
&lt;pre&gt;                            OrderNumber = &lt;span class="str"&gt;&amp;quot;o-100-001&amp;quot;&lt;/span&gt;,&lt;/pre&gt;
&lt;pre class="alt"&gt;                            OrderDate = DateTime.Today,&lt;/pre&gt;
&lt;pre&gt;                            Customer = customer&lt;/pre&gt;
&lt;pre class="alt"&gt;                        };&lt;/pre&gt;
&lt;pre&gt;            _order.OrderLines.Add(line1);&lt;/pre&gt;
&lt;pre class="alt"&gt;            _order.OrderLines.Add(line2);&lt;/pre&gt;
&lt;pre&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre class="alt"&gt;            &lt;span class="kwrd"&gt;using&lt;/span&gt; (ISession session = SessionFactory.OpenSession())&lt;/pre&gt;
&lt;pre&gt;                &lt;span class="kwrd"&gt;using&lt;/span&gt; (ITransaction transaction = session.BeginTransaction())&lt;/pre&gt;
&lt;pre class="alt"&gt;                {&lt;/pre&gt;
&lt;pre&gt;                    session.Save(customer);&lt;/pre&gt;
&lt;pre class="alt"&gt;                    session.Save(_order);&lt;/pre&gt;
&lt;pre&gt;                    transaction.Commit();&lt;/pre&gt;
&lt;pre class="alt"&gt;                }&lt;/pre&gt;
&lt;pre&gt;        }&lt;/pre&gt;
&lt;pre class="alt"&gt;    }&lt;/pre&gt;
&lt;pre&gt;}&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;
&amp;lt;style type=&amp;quot;text/css&amp;quot;&amp;gt;&amp;lt;!--
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, &amp;quot;Courier New&amp;quot;, courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
--&amp;gt;&amp;lt;/style&amp;gt;
&lt;/p&gt;
&lt;p&gt;The &lt;b&gt;CreateInitialData&lt;/b&gt; method is run before each test. With this we guarantee that each test is side effects free.&lt;/p&gt;
&lt;h3&gt;Verifying the default behavior - Lazy Loading&lt;/h3&gt;
&lt;p&gt;When loading an order entity from database the default behavior of NHibernate is to lazy load all associated objects of the order entity. Let&amp;#39;s write a test to verify this. For the verification we use a utility class provided by NHibernate (NHibernateUtil) which can test whether an associated object or object collection is initialized (i.e. loaded) or not. The class can also force the initialization of an un-initialized relation.&lt;/p&gt;
&lt;div class="csharpcode"&gt;
&lt;pre class="alt"&gt;[Test]&lt;/pre&gt;
&lt;pre&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Customer_and_OrderLines_are_not_loaded_when_loading_Order()&lt;/pre&gt;
&lt;pre class="alt"&gt;{&lt;/pre&gt;
&lt;pre&gt;    Order fromDb;&lt;/pre&gt;
&lt;pre class="alt"&gt;    &lt;span class="kwrd"&gt;using&lt;/span&gt; (ISession session = SessionFactory.OpenSession())&lt;/pre&gt;
&lt;pre&gt;        fromDb = session.Get&amp;lt;Order&amp;gt;(_order.Id);&lt;/pre&gt;
&lt;pre class="alt"&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre&gt;    Assert.IsFalse(NHibernateUtil.IsInitialized(fromDb.Customer));&lt;/pre&gt;
&lt;pre class="alt"&gt;    Assert.IsFalse(NHibernateUtil.IsInitialized(fromDb.OrderLines));&lt;/pre&gt;
&lt;pre&gt;}&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;
&amp;lt;style type=&amp;quot;text/css&amp;quot;&amp;gt;&amp;lt;!--
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, &amp;quot;Courier New&amp;quot;, courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
--&amp;gt;&amp;lt;/style&amp;gt;
&lt;/p&gt;
&lt;p&gt;The test succeeds and NHibernate generates SQL similar to this one&lt;/p&gt;
&lt;div class="csharpcode"&gt;
&lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;SELECT&lt;/span&gt;    order0_.Id &lt;span class="kwrd"&gt;as&lt;/span&gt; Id0_0_, &lt;/pre&gt;
&lt;pre&gt;    order0_.OrderNumber &lt;span class="kwrd"&gt;as&lt;/span&gt; OrderNum2_0_0_, &lt;/pre&gt;
&lt;pre class="alt"&gt;    order0_.OrderDate &lt;span class="kwrd"&gt;as&lt;/span&gt; OrderDate0_0_, &lt;/pre&gt;
&lt;pre&gt;    order0_.CustomerId &lt;span class="kwrd"&gt;as&lt;/span&gt; CustomerId0_0_ &lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;FROM&lt;/span&gt;    Orders order0_ &lt;/pre&gt;
&lt;pre&gt;&lt;span class="kwrd"&gt;WHERE&lt;/span&gt;    order0_.Id=&lt;span class="str"&gt;&amp;#39;15bca5b3-2771-4bee-9923-85bda66318d8&amp;#39;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;
&amp;lt;style type=&amp;quot;text/css&amp;quot;&amp;gt;&amp;lt;!--
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, &amp;quot;Courier New&amp;quot;, courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
--&amp;gt;&amp;lt;/style&amp;gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Now we have a problem: If we want to access the order line items (after the session has been closed) we get an exception. Since the session is closed NHibernate cannot lazily load the order line items for us. We can show this behavior with the following test method&lt;/p&gt;
&lt;div class="csharpcode"&gt;
&lt;pre class="alt"&gt;[Test]&lt;/pre&gt;
&lt;pre&gt;[ExpectedException(&lt;span class="kwrd"&gt;typeof&lt;/span&gt;(LazyInitializationException))]&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Accessing_customer_of_order_after_session_is_closed_throws()&lt;/pre&gt;
&lt;pre&gt;{&lt;/pre&gt;
&lt;pre class="alt"&gt;    Order fromDb;&lt;/pre&gt;
&lt;pre&gt;    &lt;span class="kwrd"&gt;using&lt;/span&gt; (ISession session = SessionFactory.OpenSession())&lt;/pre&gt;
&lt;pre class="alt"&gt;        fromDb = session.Get&amp;lt;Order&amp;gt;(_order.Id);&lt;/pre&gt;
&lt;pre&gt;    &lt;/pre&gt;
&lt;pre class="alt"&gt;    &lt;span class="rem"&gt;// trying to access the Customer of the order, will throw exception&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;    &lt;span class="rem"&gt;// Note: at this point the session is already closed&lt;/span&gt;&lt;/pre&gt;
&lt;pre class="alt"&gt;    &lt;span class="kwrd"&gt;string&lt;/span&gt; name = fromDb.Customer.CompanyName;&lt;/pre&gt;
&lt;pre&gt;}&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;Note: the above test &lt;b&gt;only&lt;/b&gt; succeeds if the method throws the expected exception of type &lt;b&gt;LazyInitializationException&lt;/b&gt;. And this is just what we want to show!
&amp;lt;style type=&amp;quot;text/css&amp;quot;&amp;gt;&amp;lt;!--
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, &amp;quot;Courier New&amp;quot;, courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
--&amp;gt;&amp;lt;/style&amp;gt;
&lt;/p&gt;
&lt;p&gt;Another problem is the &lt;b&gt;n+1 select statements problem&lt;/b&gt;. If we access the order line items after loading the order we generate a select statement for each line item we access. Thus if we have n line items and want to access them all we generate one select statement for the order itself and n select statements for all line items (result: n+1 select statements). This can make our data fetching rather slow and put a (unnecessary) burden onto our database.&lt;/p&gt;
&lt;p&gt;We can simulate this behavior with this test method&lt;/p&gt;
&lt;div class="csharpcode"&gt;
&lt;pre class="alt"&gt;[Test]&lt;/pre&gt;
&lt;pre&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Show_n_plus_1_select_behavior()&lt;/pre&gt;
&lt;pre class="alt"&gt;{&lt;/pre&gt;
&lt;pre&gt;    &lt;span class="kwrd"&gt;using&lt;/span&gt; (ISession session = SessionFactory.OpenSession())&lt;/pre&gt;
&lt;pre class="alt"&gt;    {&lt;/pre&gt;
&lt;pre&gt;        var fromDb = session.Get&amp;lt;Order&amp;gt;(_order.Id);&lt;/pre&gt;
&lt;pre class="alt"&gt;        &lt;span class="kwrd"&gt;int&lt;/span&gt; sum = 0;&lt;/pre&gt;
&lt;pre&gt;        &lt;span class="kwrd"&gt;foreach&lt;/span&gt; (var line &lt;span class="kwrd"&gt;in&lt;/span&gt; fromDb.OrderLines)&lt;/pre&gt;
&lt;pre class="alt"&gt;        {&lt;/pre&gt;
&lt;pre&gt;            &lt;span class="rem"&gt;// just some dummy code to force loading of order line&lt;/span&gt;&lt;/pre&gt;
&lt;pre class="alt"&gt;            sum += line.Amount;&lt;/pre&gt;
&lt;pre&gt;        } &lt;/pre&gt;
&lt;pre class="alt"&gt;    }&lt;/pre&gt;
&lt;pre&gt;}&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;NHibernate will generate SQL similar to the following
&amp;lt;style type=&amp;quot;text/css&amp;quot;&amp;gt;&amp;lt;!--
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, &amp;quot;Courier New&amp;quot;, courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
--&amp;gt;&amp;lt;/style&amp;gt;
&lt;/p&gt;
&lt;div class="csharpcode"&gt;
&lt;pre class="alt"&gt;SELECT order0_.Id &lt;span class="kwrd"&gt;as&lt;/span&gt; Id3_0_, &lt;/pre&gt;
&lt;pre&gt;       order0_.OrderNumber &lt;span class="kwrd"&gt;as&lt;/span&gt; OrderNum2_3_0_, &lt;/pre&gt;
&lt;pre class="alt"&gt;       order0_.OrderDate &lt;span class="kwrd"&gt;as&lt;/span&gt; OrderDate3_0_, &lt;/pre&gt;
&lt;pre&gt;       order0_.Customer &lt;span class="kwrd"&gt;as&lt;/span&gt; Customer3_0_ &lt;/pre&gt;
&lt;pre class="alt"&gt;FROM   Orders order0_ &lt;/pre&gt;
&lt;pre&gt;WHERE  order0_.Id=&lt;span class="str"&gt;&amp;#39;5b2dbcb7-d0bf-4c53-86aa-8cd40cb5061a&amp;#39;&lt;/span&gt;&lt;/pre&gt;
&lt;pre class="alt"&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre&gt;SELECT orderlines0_.OrderId &lt;span class="kwrd"&gt;as&lt;/span&gt; OrderId1_, &lt;/pre&gt;
&lt;pre class="alt"&gt;       orderlines0_.Id &lt;span class="kwrd"&gt;as&lt;/span&gt; Id1_, &lt;/pre&gt;
&lt;pre&gt;       orderlines0_.Id &lt;span class="kwrd"&gt;as&lt;/span&gt; Id4_0_, &lt;/pre&gt;
&lt;pre class="alt"&gt;       orderlines0_.Amount &lt;span class="kwrd"&gt;as&lt;/span&gt; Amount4_0_, &lt;/pre&gt;
&lt;pre&gt;       orderlines0_.ProductName &lt;span class="kwrd"&gt;as&lt;/span&gt; ProductN3_4_0_ &lt;/pre&gt;
&lt;pre class="alt"&gt;FROM   OrderLine orderlines0_ &lt;/pre&gt;
&lt;pre&gt;WHERE  orderlines0_.OrderId=&lt;span class="str"&gt;&amp;#39;5b2dbcb7-d0bf-4c53-86aa-8cd40cb5061a&amp;#39;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;
&amp;lt;style type=&amp;quot;text/css&amp;quot;&amp;gt;&amp;lt;!--
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, &amp;quot;Courier New&amp;quot;, courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
--&amp;gt;&amp;lt;/style&amp;gt;
&lt;/p&gt;
&lt;p&gt;This time we have been lucky! NHibernate has automatically generated an optimized query for us and has loaded the 2 order line items in one go. But this is not always the case! Imagine having a collection with several 100 items and you only need to access one or two of them. It would be a waste of resources to always load all items.&lt;/p&gt;
&lt;p&gt;But fortunately we have a solution for these kind of problems with NHibernate. It&amp;#39;s called eagerly loading.&lt;/p&gt;
&lt;h3&gt;Eagerly loading with the NHibernateUtil class&lt;/h3&gt;
&lt;p&gt;If you know you need have access to related objects of the order entity you can use the &lt;b&gt;NHibernateUtil&lt;/b&gt; class to initialize the related objects (that is: to fetch them from the database). Have a look at this test methods&lt;/p&gt;
&lt;div class="csharpcode"&gt;
&lt;pre class="alt"&gt;[Test]&lt;/pre&gt;
&lt;pre&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Can_initialize_customer_of_order_with_nhibernate_util()&lt;/pre&gt;
&lt;pre class="alt"&gt;{&lt;/pre&gt;
&lt;pre&gt;    Order fromDb;&lt;/pre&gt;
&lt;pre class="alt"&gt;    &lt;span class="kwrd"&gt;using&lt;/span&gt; (ISession session = SessionFactory.OpenSession())&lt;/pre&gt;
&lt;pre&gt;    {&lt;/pre&gt;
&lt;pre class="alt"&gt;        fromDb = session.Get&amp;lt;Order&amp;gt;(_order.Id);&lt;/pre&gt;
&lt;pre&gt;        NHibernateUtil.Initialize(fromDb.Customer);&lt;/pre&gt;
&lt;pre class="alt"&gt;    }&lt;/pre&gt;
&lt;pre&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre class="alt"&gt;    Assert.IsTrue(NHibernateUtil.IsInitialized(fromDb.Customer));&lt;/pre&gt;
&lt;pre&gt;    Assert.IsFalse(NHibernateUtil.IsInitialized(fromDb.OrderLines));&lt;/pre&gt;
&lt;pre class="alt"&gt;}&lt;/pre&gt;
&lt;pre&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre class="alt"&gt;[Test]&lt;/pre&gt;
&lt;pre&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Can_initialize_order_lines_of_order_with_nhibernate_util()&lt;/pre&gt;
&lt;pre class="alt"&gt;{&lt;/pre&gt;
&lt;pre&gt;    Order fromDb;&lt;/pre&gt;
&lt;pre class="alt"&gt;    &lt;span class="kwrd"&gt;using&lt;/span&gt; (ISession session = SessionFactory.OpenSession())&lt;/pre&gt;
&lt;pre&gt;    {&lt;/pre&gt;
&lt;pre class="alt"&gt;        fromDb = session.Get&amp;lt;Order&amp;gt;(_order.Id);&lt;/pre&gt;
&lt;pre&gt;        NHibernateUtil.Initialize(fromDb.OrderLines);&lt;/pre&gt;
&lt;pre class="alt"&gt;    }&lt;/pre&gt;
&lt;pre&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre class="alt"&gt;    Assert.IsFalse(NHibernateUtil.IsInitialized(fromDb.Customer));&lt;/pre&gt;
&lt;pre&gt;    Assert.IsTrue(NHibernateUtil.IsInitialized(fromDb.OrderLines));&lt;/pre&gt;
&lt;pre class="alt"&gt;}&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;
&amp;lt;style type=&amp;quot;text/css&amp;quot;&amp;gt;&amp;lt;!--
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, &amp;quot;Courier New&amp;quot;, courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
--&amp;gt;&amp;lt;/style&amp;gt;
&lt;/p&gt;
&lt;p&gt;With this utility class you can initialize single objects as well as collection of objects. In each case NHibernate will send 2 select statements to the database. One to select the order and one to initialize the related object(s).&lt;/p&gt;
&lt;h3&gt;Eagerly loading with HQL&lt;/h3&gt;
&lt;p&gt;If you know that you want to load all order items of a given order then you can tell NHibernate to do so and eagerly load all order lines together with the order in one go. The following test method shows how you can formulate a HQL query which not only loads the order but also the associated customer and order lines.&lt;/p&gt;
&lt;div class="csharpcode"&gt;
&lt;pre class="alt"&gt;[Test]&lt;/pre&gt;
&lt;pre&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Can_eagerly_load_order_aggregate_with_hql_query()&lt;/pre&gt;
&lt;pre class="alt"&gt;{&lt;/pre&gt;
&lt;pre&gt;    Order fromDb;&lt;/pre&gt;
&lt;pre class="alt"&gt;    &lt;span class="kwrd"&gt;using&lt;/span&gt; (ISession session = SessionFactory.OpenSession())&lt;/pre&gt;
&lt;pre&gt;    {&lt;/pre&gt;
&lt;pre class="alt"&gt;        &lt;span class="kwrd"&gt;string&lt;/span&gt; sql = &lt;span class="str"&gt;&amp;quot;from Order o&amp;quot;&lt;/span&gt; +&lt;/pre&gt;
&lt;pre&gt;                     &lt;span class="str"&gt;&amp;quot; inner join fetch o.OrderLines&amp;quot;&lt;/span&gt; +&lt;/pre&gt;
&lt;pre class="alt"&gt;                     &lt;span class="str"&gt;&amp;quot; inner join fetch o.Customer&amp;quot;&lt;/span&gt; +&lt;/pre&gt;
&lt;pre&gt;                     &lt;span class="str"&gt;&amp;quot; where o.Id=:id&amp;quot;&lt;/span&gt;;&lt;/pre&gt;
&lt;pre class="alt"&gt;        fromDb = session.CreateQuery(sql)&lt;/pre&gt;
&lt;pre&gt;                        .SetGuid(&lt;span class="str"&gt;&amp;quot;id&amp;quot;&lt;/span&gt;, _order.Id)&lt;/pre&gt;
&lt;pre class="alt"&gt;                        .UniqueResult&amp;lt;Order&amp;gt;();&lt;/pre&gt;
&lt;pre&gt;    }&lt;/pre&gt;
&lt;pre class="alt"&gt;    Assert.IsTrue(NHibernateUtil.IsInitialized(fromDb.Customer));&lt;/pre&gt;
&lt;pre&gt;    Assert.IsTrue(NHibernateUtil.IsInitialized(fromDb.OrderLines));&lt;/pre&gt;
&lt;pre class="alt"&gt;}&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;
&amp;lt;style type=&amp;quot;text/css&amp;quot;&amp;gt;&amp;lt;!--
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, &amp;quot;Courier New&amp;quot;, courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
--&amp;gt;&amp;lt;/style&amp;gt;
&lt;/p&gt;
&lt;p&gt;The resulting sql generated by NHibernate is then similar to this one&lt;/p&gt;
&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;select&lt;/span&gt;      order0_.Id &lt;span class="kwrd"&gt;as&lt;/span&gt; Id0_0_, &lt;br /&gt;            orderlines1_.Id &lt;span class="kwrd"&gt;as&lt;/span&gt; Id1_1_, &lt;br /&gt;            customer2_.Id &lt;span class="kwrd"&gt;as&lt;/span&gt; Id2_2_, &lt;br /&gt;            order0_.OrderNumber &lt;span class="kwrd"&gt;as&lt;/span&gt; OrderNum2_0_0_, &lt;br /&gt;            order0_.OrderDate &lt;span class="kwrd"&gt;as&lt;/span&gt; OrderDate0_0_, &lt;br /&gt;            order0_.CustomerId &lt;span class="kwrd"&gt;as&lt;/span&gt; CustomerId0_0_, &lt;br /&gt;            orderlines1_.Amount &lt;span class="kwrd"&gt;as&lt;/span&gt; Amount1_1_, &lt;br /&gt;            orderlines1_.ProductName &lt;span class="kwrd"&gt;as&lt;/span&gt; ProductN3_1_1_, &lt;br /&gt;            customer2_.CompanyName &lt;span class="kwrd"&gt;as&lt;/span&gt; CompanyN2_2_2_, &lt;br /&gt;            orderlines1_.OrderId &lt;span class="kwrd"&gt;as&lt;/span&gt; OrderId0__, &lt;br /&gt;            orderlines1_.Id &lt;span class="kwrd"&gt;as&lt;/span&gt; Id0__ &lt;br /&gt;&lt;span class="kwrd"&gt;from&lt;/span&gt;        Orders order0_ &lt;br /&gt;&lt;span class="kwrd"&gt;inner&lt;/span&gt; &lt;span class="kwrd"&gt;join&lt;/span&gt;  OrderLine orderlines1_ &lt;span class="kwrd"&gt;on&lt;/span&gt; order0_.Id=orderlines1_.OrderId &lt;br /&gt;&lt;span class="kwrd"&gt;inner&lt;/span&gt; &lt;span class="kwrd"&gt;join&lt;/span&gt;  Customer customer2_ &lt;span class="kwrd"&gt;on&lt;/span&gt; order0_.CustomerId=customer2_.Id &lt;br /&gt;&lt;span class="kwrd"&gt;where&lt;/span&gt;       order0_.Id=&lt;span class="str"&gt;&amp;#39;409ebd99-3206-459b-bfed-6df989284da9&amp;#39;&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;
&amp;lt;style type=&amp;quot;text/css&amp;quot;&amp;gt;&amp;lt;!--
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, &amp;quot;Courier New&amp;quot;, courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
--&amp;gt;&amp;lt;/style&amp;gt;
&lt;/p&gt;
&lt;p&gt;NHibernate has created an SQL select statement which joins the 3 tables involved, namely &lt;b&gt;Orders&lt;/b&gt;, &lt;b&gt;Customer&lt;/b&gt; and &lt;b&gt;OrderLine&lt;/b&gt;. The returned (flat) set of records is then used by NHibernate to build up the object tree with the order entity as a root.&lt;/p&gt;
&lt;h2&gt;Aggregates in the Domain&lt;/h2&gt;
&lt;p&gt;DDD defines the concept of &lt;a href="http://domaindrivendesign.org/discussion/messageboardarchive/Aggregates.html"&gt;aggregates&lt;/a&gt;. A short definition of an aggregate is &amp;quot;&lt;i&gt;A cluster of associated objects that are treated as a unit for the purpose of data changes.&amp;quot;. &lt;/i&gt;An aggregate always has a &lt;i&gt;root&lt;/i&gt;.&lt;i&gt;&amp;nbsp;&lt;/i&gt;In this context we can define the following aggregate in our domain&lt;/p&gt;
&lt;p&gt;&lt;a href="/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/nhibernate/image_5F00_8.png"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" alt="image" src="/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/nhibernate/image_5F00_thumb_5F00_3.png" width="575" border="0" height="445" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;The order entity is the &lt;i&gt;root&lt;/i&gt; and the order lines belong to the aggregate (can be regarded as children of the &lt;i&gt;root&lt;/i&gt;). When creating a new order or changing an existing one we only want to modify either the order itself or its order lines. We certainly do not want to change the customer entity because this would be a completely different use case and does not belong to the &lt;i&gt;order management&lt;/i&gt; use case.&lt;/p&gt;
&lt;p&gt;So, when dealing with aggregates we often want to load the complete aggregate in one go! This is the perfect example for using &lt;b&gt;eager loading&lt;/b&gt; techniques.&lt;/p&gt;
&lt;h2&gt;Summary&lt;/h2&gt;
&lt;p&gt;I have introduced the concept of lazy loading as provided by NHibernate. I have discussed the consequences and shown how to avoid negative side effects by using different techniques of so called eager loading.&lt;/p&gt;
&lt;p&gt;&lt;a href="/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/nhibernate/Blog-Signature-Gabriel_5F00_2.png"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" alt="Blog Signature Gabriel" src="/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/nhibernate/Blog-Signature-Gabriel_5F00_thumb.png" width="244" border="0" height="21" /&gt;&lt;/a&gt;&lt;/p&gt;</description></item></channel></rss>
