<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:copyright="http://blogs.law.harvard.edu/tech/rss" xmlns:image="http://purl.org/rss/1.0/modules/image/">
    <channel>
        <title>ActiveRecord</title>
        <link>http://www.darkside.co.za/category/8.aspx</link>
        <description>Castle ActiveRecord</description>
        <language>en-ZA</language>
        <copyright>Ryan Schreiber</copyright>
        <generator>Subtext Version 2.1.0.5</generator>
        <item>
            <title>Configuration in Castle ActiveRecord 2</title>
            <link>http://www.darkside.co.za/archive/2009/05/25/configuring-castle-activerecord-2.aspx</link>
            <description>&lt;p&gt;If you’ve decided to download the &lt;a title="Castle ActiveRecord 2 Alpha Download" href="http://groups.google.com/group/castle-project-users/web/ActiveRecord2.0Alpha1.zip" target="_blank"&gt;Castle ActiveRecord 2 Alpha&lt;/a&gt; version and see how it affects your existing projects, you’ll most likely get an error like this: “&lt;font color="#ff0000" face="Courier New"&gt;The ProxyFactoryFactory was not configured.Initialize 'proxyfactory.factory_class' property of the session-factory configuration section with one of the available NHibernate.ByteCode providers.&lt;/font&gt;”. This release of ActiveRecord makes use of NHibernate version 2.1.0.1003, which requires an additional entry in the configuration section to work correctly. The updated configuration section for your config file looks like this (line 13 in the example is what you’ll need to add):&lt;/p&gt;  &lt;div class="Code"&gt;   &lt;pre style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;    1&lt;/span&gt; &lt;span style="color: blue"&gt;  &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;activerecord&lt;/span&gt;&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;    2&lt;/span&gt; &lt;span style="color: blue"&gt;    &lt;/span&gt;&lt;span style="color: red"&gt;isWeb&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;false&lt;/span&gt;"&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;    3&lt;/span&gt; &lt;span style="color: blue"&gt;    &lt;/span&gt;&lt;span style="color: red"&gt;isDebug&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;true&lt;/span&gt;"&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;    4&lt;/span&gt; &lt;span style="color: blue"&gt;    &lt;/span&gt;&lt;span style="color: red"&gt;threadinfotype&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;""&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;    5&lt;/span&gt; &lt;span style="color: blue"&gt;    &lt;/span&gt;&lt;span style="color: red"&gt;sessionfactoryholdertype&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;""&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;    6&lt;/span&gt; &lt;span style="color: blue"&gt;    &lt;/span&gt;&lt;span style="color: red"&gt;namingstrategytype&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;""&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;    7&lt;/span&gt; &lt;span style="color: blue"&gt;    &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;config&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;    8&lt;/span&gt; &lt;span style="color: blue"&gt;      &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;add&lt;/span&gt;&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;key&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;connection.provider&lt;/span&gt;"&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;value&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;NHibernate.Connection.DriverConnectionProvider&lt;/span&gt;"&lt;span style="color: blue"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;    9&lt;/span&gt; &lt;span style="color: blue"&gt;      &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;add&lt;/span&gt;&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;key&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;dialect&lt;/span&gt;"&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;value&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;NHibernate.Dialect.MsSql2005Dialect&lt;/span&gt;"&lt;span style="color: blue"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;   10&lt;/span&gt; &lt;span style="color: blue"&gt;      &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;add&lt;/span&gt;&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;key&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;connection.driver_class&lt;/span&gt;"&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;value&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;NHibernate.Driver.SqlClientDriver&lt;/span&gt;"&lt;span style="color: blue"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;   11&lt;/span&gt; &lt;span style="color: blue"&gt;      &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;add&lt;/span&gt;&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;key&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;connection.connection_string&lt;/span&gt;"&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;value&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;Server=(local);initial catalog=AppTest; Integrated Security=SSPI&lt;/span&gt;"&lt;span style="color: blue"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;   12&lt;/span&gt; &lt;span style="color: blue"&gt;      &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;add&lt;/span&gt;&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;key&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;show_sql&lt;/span&gt;"&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;value&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;true&lt;/span&gt;"&lt;span style="color: blue"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;   13&lt;/span&gt; &lt;span style="color: blue"&gt;      &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;add&lt;/span&gt;&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;key&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;proxyfactory.factory_class&lt;/span&gt;"&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;value&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;NHibernate.ByteCode.Castle.ProxyFactoryFactory, NHibernate.ByteCode.Castle&lt;/span&gt;"&lt;span style="color: blue"&gt; /&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;   14&lt;/span&gt; &lt;span style="color: blue"&gt;    &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;config&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;   15&lt;/span&gt; &lt;span style="color: blue"&gt;  &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;activerecord&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;&lt;img src="http://www.darkside.co.za/aggbug/102.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Ryan Schreiber</dc:creator>
            <guid>http://www.darkside.co.za/archive/2009/05/25/configuring-castle-activerecord-2.aspx</guid>
            <pubDate>Mon, 25 May 2009 06:29:52 GMT</pubDate>
            <comments>http://www.darkside.co.za/archive/2009/05/25/configuring-castle-activerecord-2.aspx#feedback</comments>
            <wfw:commentRss>http://www.darkside.co.za/comments/commentRss/102.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Using Castle ActiveRecord and a class hierarchy</title>
            <link>http://www.darkside.co.za/archive/2009/03/12/castle-activerecord-class-hierarchy.aspx</link>
            <description>&lt;p&gt;Very often, one of the requirements that an application I'm working on has is that it needs an audit trail. In this post I'm going to go through a technique that will build the foundation which will allow you to add record-based audit trails to your application. &lt;/p&gt;
&lt;p&gt;We'll look at adding application user information and time stamps to the data using inheritance, as well as overriding some methods in the ActiveRecord base classes to automatically populate these values. &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Download&lt;/strong&gt; - &lt;a href="http://www.darkside.co.za/files/Darkside.AuditTrail.Part1.zip"&gt;Darkside.AuditTrail.Part1.zip&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;First off, let's define a mini-spec on what our "system" should do with respect to the auditing:&lt;/p&gt;
&lt;ol&gt;
    &lt;li&gt;All records added and updated should be recorded, including who edited the record and when &lt;/li&gt;
    &lt;li&gt;Records in the database should never be deleted, only flagged for deletion &lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Based on the requirements above, I can immediately see that our domain classes are going to have common fields; This makes class inheritance a prime candidate for solving this problem. Our common fields are: &lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;IsDeleted (bool) - This will be our flag for deleted records &lt;/li&gt;
    &lt;li&gt;EditedById (Guid) - A FK to our user table, indicating the person that edited this record &lt;/li&gt;
    &lt;li&gt;EditedDateTime (DateTime) - The date and time the record was last edited &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Its worth noting that if your decide to do record locking in your application, you should consider adding an additional field that has the &lt;strong&gt;[Version]&lt;/strong&gt; attribute to this base class as well&lt;/p&gt;
&lt;p&gt;I've outlined the beginning of base class in the code below. Something worth pointing out is the fact that I've decided to add the property &lt;strong&gt;Id&lt;/strong&gt; to the class and make it abstract; This is a personal preference only - I like to have the primary key of my objects called &lt;strong&gt;Id&lt;/strong&gt;. &lt;/p&gt;
&lt;div class="CodeCollapse"&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: blue"&gt;abstract&lt;/span&gt; &lt;span style="COLOR: blue"&gt;partial&lt;/span&gt; &lt;span style="COLOR: blue"&gt;class&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;ObjectBase&lt;/span&gt;&amp;lt;T&amp;gt; : &lt;span style="COLOR: #2b91af"&gt;ActiveRecordBase&lt;/span&gt; &amp;lt;T&amp;gt; &lt;span style="COLOR: blue"&gt;where&lt;/span&gt; T: &lt;span style="COLOR: #2b91af"&gt;ObjectBase&lt;/span&gt;&amp;lt;T&amp;gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;{&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;    #region&lt;/span&gt; Field Name Constants&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;    &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: blue"&gt;const&lt;/span&gt; &lt;span style="COLOR: blue"&gt;string&lt;/span&gt; IsDeletedFieldName = &lt;span style="COLOR: #a31515"&gt;"IsDeleted"&lt;/span&gt;;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;    &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: blue"&gt;const&lt;/span&gt; &lt;span style="COLOR: blue"&gt;string&lt;/span&gt; EditedByIdFieldName = &lt;span style="COLOR: #a31515"&gt;"EditedById"&lt;/span&gt;;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;    &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: blue"&gt;const&lt;/span&gt; &lt;span style="COLOR: blue"&gt;string&lt;/span&gt; EditedDateTimeFieldName = &lt;span style="COLOR: #a31515"&gt;"EditedDateTime"&lt;/span&gt;;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;    #endregion&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt; &lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;    &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: blue"&gt;abstract&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;Guid&lt;/span&gt; Id { &lt;span style="COLOR: blue"&gt;get&lt;/span&gt;; &lt;span style="COLOR: blue"&gt;set&lt;/span&gt;; }&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt; &lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;    [&lt;span style="COLOR: #2b91af"&gt;Property&lt;/span&gt;(Column = EditedByIdFieldName)]&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;    &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: blue"&gt;bool&lt;/span&gt; IsDeleted { &lt;span style="COLOR: blue"&gt;get&lt;/span&gt;; &lt;span style="COLOR: blue"&gt;set&lt;/span&gt;; }&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt; &lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;    [&lt;span style="COLOR: #2b91af"&gt;Property&lt;/span&gt;(Column = EditedByIdFieldName)]&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;    &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;Guid&lt;/span&gt; EditedById { &lt;span style="COLOR: blue"&gt;get&lt;/span&gt;; &lt;span style="COLOR: blue"&gt;set&lt;/span&gt;; }&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt; &lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;    [&lt;span style="COLOR: #2b91af"&gt;Property&lt;/span&gt;(Column=EditedDateTimeFieldName, ColumnType = &lt;span style="COLOR: #a31515"&gt;"TimeStamp"&lt;/span&gt;)]&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;    &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;DateTime&lt;/span&gt; EditedDateTime { &lt;span style="COLOR: blue"&gt;get&lt;/span&gt;; &lt;span style="COLOR: blue"&gt;set&lt;/span&gt;; }&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;}&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;Now, we can continue defining our domain objects, but inherit from our own base class.&lt;/p&gt;
&lt;p&gt;For this sample project, I'm going to have 3 domain objects. They will be:&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;&lt;strong&gt;ApplicationUser&lt;/strong&gt; - The user that will log on to the application and that we need to keep track of to allow the EditedId field to be updated.  &lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Customer&lt;/strong&gt; - A customer detail class &lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Address&lt;/strong&gt; - An address class, of which will have a many-to-one relationship to Customer &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Lets start with the AcitveRecord attribute on the  &lt;strong&gt;ApplicationUser&lt;/strong&gt; class.  &lt;/p&gt;
&lt;div class="Code"&gt;
&lt;pre style="MARGIN: 0px"&gt;[&lt;span style="COLOR: #2b91af"&gt;ActiveRecord&lt;/span&gt;(Table = &lt;span style="COLOR: #a31515"&gt;"ApplicationUser"&lt;/span&gt;, Where=&lt;span style="COLOR: #a31515"&gt;"IsDeleted=0"&lt;/span&gt;)]&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;Notice that I've include a value for the property &lt;strong&gt;Where&lt;/strong&gt;, which allows you to add a SQL condition which is applied when you fetch objects. This helps our classes conform to the "Records in the database should never be deleted..." requirement. This will ensure that records returned always have the &lt;strong&gt;IsDeleted&lt;/strong&gt; property equal to 0.&lt;/p&gt;
&lt;p&gt;In addition to the mapping in this class, I've added another file (partial class) for &lt;strong&gt;ApplicationUser&lt;/strong&gt; that implements &lt;strong&gt;IPrincipal&lt;/strong&gt; and &lt;strong&gt;IIdentity&lt;/strong&gt;.  &lt;/p&gt;
&lt;div class="CodeCollapse"&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: blue"&gt;partial&lt;/span&gt; &lt;span style="COLOR: blue"&gt;class&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;ApplicationUser&lt;/span&gt; :&lt;span style="COLOR: #2b91af"&gt;IPrincipal&lt;/span&gt;  , &lt;span style="COLOR: #2b91af"&gt;IIdentity&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;{&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;    #region&lt;/span&gt; IPrincipal Members&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt; &lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;    &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;IIdentity&lt;/span&gt; Identity&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;    {&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;        &lt;span style="COLOR: blue"&gt;get&lt;/span&gt; { &lt;span style="COLOR: blue"&gt;return&lt;/span&gt; (&lt;span style="COLOR: blue"&gt;this&lt;/span&gt;); }&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;    }&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt; &lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;    &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: blue"&gt;bool&lt;/span&gt; IsInRole(&lt;span style="COLOR: blue"&gt;string&lt;/span&gt; role)&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;    {&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;        &lt;span style="COLOR: blue"&gt;return&lt;/span&gt; (&lt;span style="COLOR: blue"&gt;true&lt;/span&gt;);&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;    }&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt; &lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;    #endregion&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt; &lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;    #region&lt;/span&gt; IIdentity Members&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt; &lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;    &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: blue"&gt;string&lt;/span&gt; AuthenticationType&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;    {&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;        &lt;span style="COLOR: blue"&gt;get&lt;/span&gt; { &lt;span style="COLOR: blue"&gt;return&lt;/span&gt; (&lt;span style="COLOR: #a31515"&gt;"ApplicationAuthentication"&lt;/span&gt;); }&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;    }&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt; &lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;    &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: blue"&gt;bool&lt;/span&gt; IsAuthenticated { &lt;span style="COLOR: blue"&gt;get&lt;/span&gt;; &lt;span style="COLOR: blue"&gt;set&lt;/span&gt;; }&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt; &lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;    &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: blue"&gt;string&lt;/span&gt; Name&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;    {&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;        &lt;span style="COLOR: blue"&gt;get&lt;/span&gt; { &lt;span style="COLOR: blue"&gt;return&lt;/span&gt; (UserName); }&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;    }&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;    #endregion&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;}&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;I prefer using a class that implements these two interfaces for logging in. I digress slightly from the point of this post, but a simple implementation of an &lt;strong&gt;Authenticate&lt;/strong&gt; method could look something like this: &lt;/p&gt;
&lt;div class="CodeCollapse"&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: blue"&gt;static&lt;/span&gt; &lt;span style="COLOR: blue"&gt;void&lt;/span&gt; AuthenticateUser(&lt;span style="COLOR: blue"&gt;string&lt;/span&gt; userName, &lt;span style="COLOR: blue"&gt;string&lt;/span&gt; password)&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;{&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;    &lt;span style="COLOR: blue"&gt;var&lt;/span&gt; userNameCriterion = &lt;span style="COLOR: #2b91af"&gt;Restrictions&lt;/span&gt;.Eq(&lt;span style="COLOR: #a31515"&gt;"UserName"&lt;/span&gt;, userName);&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;    &lt;span style="COLOR: blue"&gt;var&lt;/span&gt; passwordCriterion = &lt;span style="COLOR: #2b91af"&gt;Restrictions&lt;/span&gt;.Eq(&lt;span style="COLOR: #a31515"&gt;"Password"&lt;/span&gt;, password);&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;    &lt;span style="COLOR: blue"&gt;var&lt;/span&gt; user = FindOne(userNameCriterion, passwordCriterion); &lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;    &lt;span style="COLOR: blue"&gt;if&lt;/span&gt; (user != &lt;span style="COLOR: blue"&gt;null&lt;/span&gt;)&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;    {&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;        user.IsAuthenticated = &lt;span style="COLOR: blue"&gt;true&lt;/span&gt;;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;    }&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;    &lt;span style="COLOR: blue"&gt;else&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;    {&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;        user =&lt;span style="COLOR: blue"&gt;new&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;ApplicationUser&lt;/span&gt;();&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;    }&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;    &lt;span style="COLOR: #2b91af"&gt;Thread&lt;/span&gt;.CurrentPrincipal = user;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;}&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;This way, you have access to the currently logged in user throughout your application, and is accessible from &lt;strong&gt;Thread.CurrentPrincipal&lt;/strong&gt;. And it fits in well with how I would like to automatically update certain fields in our base class :)&lt;/p&gt;
&lt;p&gt;Now that we have that out of the way, lets revisit some additional code in the base class. The code below overrides some ActiveRecord base methods, making sure the necessary fields we require are updated, as well as making sure we don't allow for data to be deleted. &lt;/p&gt;
&lt;div class="CodeCollapse"&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: blue"&gt;abstract&lt;/span&gt; &lt;span style="COLOR: blue"&gt;partial&lt;/span&gt; &lt;span style="COLOR: blue"&gt;class&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;ObjectBase&lt;/span&gt;&amp;lt;T&amp;gt;: &lt;span style="COLOR: #2b91af"&gt;ActiveRecordBase&lt;/span&gt;&amp;lt;T&amp;gt; &lt;span style="COLOR: blue"&gt;where&lt;/span&gt; T : &lt;span style="COLOR: #2b91af"&gt;ObjectBase&lt;/span&gt;&amp;lt;T&amp;gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;{&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;    &lt;span style="COLOR: green"&gt;//Update the EditedById to the currently logged on user, and the EditedDateTime field to DateTime.Now&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;    &lt;span style="COLOR: blue"&gt;protected&lt;/span&gt; &lt;span style="COLOR: blue"&gt;override&lt;/span&gt; &lt;span style="COLOR: blue"&gt;bool&lt;/span&gt; BeforeSave(&lt;span style="COLOR: #2b91af"&gt;IDictionary&lt;/span&gt; state)&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;    {&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;        &lt;span style="COLOR: blue"&gt;base&lt;/span&gt;.BeforeSave(state);&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;        UpdateDetails(state);&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;        &lt;span style="COLOR: blue"&gt;return&lt;/span&gt; (&lt;span style="COLOR: blue"&gt;true&lt;/span&gt;);&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;    }&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt; &lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;    &lt;span style="COLOR: blue"&gt;protected&lt;/span&gt; &lt;span style="COLOR: blue"&gt;override&lt;/span&gt; &lt;span style="COLOR: blue"&gt;bool&lt;/span&gt; OnFlushDirty(&lt;span style="COLOR: blue"&gt;object&lt;/span&gt; id, &lt;span style="COLOR: #2b91af"&gt;IDictionary&lt;/span&gt; previousState, &lt;span style="COLOR: #2b91af"&gt;IDictionary&lt;/span&gt; currentState, NHibernate.Type.&lt;span style="COLOR: #2b91af"&gt;IType&lt;/span&gt;[] types)&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;    {&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;        &lt;span style="COLOR: blue"&gt;base&lt;/span&gt;.OnFlushDirty(id, previousState, currentState, types);&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;        UpdateDetails(currentState);&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;        &lt;span style="COLOR: blue"&gt;return&lt;/span&gt; (&lt;span style="COLOR: blue"&gt;true&lt;/span&gt;);&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;    }&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt; &lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;    &lt;span style="COLOR: green"&gt;//Update the EditedById to the currently logged on user, and the EditedDateTime field to DateTime.Now&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;    &lt;span style="COLOR: blue"&gt;private&lt;/span&gt; &lt;span style="COLOR: blue"&gt;static&lt;/span&gt; &lt;span style="COLOR: blue"&gt;bool&lt;/span&gt; UpdateDetails(&lt;span style="COLOR: #2b91af"&gt;IDictionary&lt;/span&gt; state)&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;    {&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;        state[EditedDateTimeFieldName] = &lt;span style="COLOR: #2b91af"&gt;DateTime&lt;/span&gt;.Now;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;        &lt;span style="COLOR: blue"&gt;if&lt;/span&gt; (&lt;span style="COLOR: #2b91af"&gt;Thread&lt;/span&gt;.CurrentPrincipal &lt;span style="COLOR: blue"&gt;is&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;ApplicationUser&lt;/span&gt;)&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;            state[EditedByIdFieldName] = (&lt;span style="COLOR: #2b91af"&gt;Thread&lt;/span&gt;.CurrentPrincipal &lt;span style="COLOR: blue"&gt;as&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;ApplicationUser&lt;/span&gt;).Id;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;        &lt;span style="COLOR: blue"&gt;else&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;            state[EditedByIdFieldName] = &lt;span style="COLOR: #2b91af"&gt;Guid&lt;/span&gt;.Empty;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;        &lt;span style="COLOR: blue"&gt;return&lt;/span&gt; (&lt;span style="COLOR: blue"&gt;true&lt;/span&gt;);&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;    }&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt; &lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;    &lt;span style="COLOR: green"&gt;//Make sure that we actually do a Save()&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;    &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: blue"&gt;override&lt;/span&gt; &lt;span style="COLOR: blue"&gt;void&lt;/span&gt; Delete()&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;    {&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;        IsDeleted = &lt;span style="COLOR: blue"&gt;true&lt;/span&gt;;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;        Save();&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;    }&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt; &lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;    &lt;span style="COLOR: green"&gt;//Make sure that we actually do a SaveAndFlush()&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;    &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: blue"&gt;override&lt;/span&gt; &lt;span style="COLOR: blue"&gt;void&lt;/span&gt; DeleteAndFlush()&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;    {&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;        IsDeleted = &lt;span style="COLOR: blue"&gt;true&lt;/span&gt;;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;        SaveAndFlush();&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;    }&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;}&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;Having a quick look at our customer class, you'll notice that you no longer inherit from &lt;strong&gt;ActiveRecordBase&lt;/strong&gt; or &lt;strong&gt;ActiveRecordBase&amp;lt;T&amp;gt;&lt;/strong&gt;, but our new &lt;strong&gt;ObjectBase&amp;lt;T&amp;gt;&lt;/strong&gt; class. You'll also notice the &lt;strong&gt;[HasMany]&lt;/strong&gt; attribute also has a &lt;strong&gt;Where&lt;/strong&gt; property set. This behaves the same way as mentioned above - it adds a SQL condition when data is fetched. &lt;/p&gt;
&lt;div class="CodeCollapse"&gt;
&lt;pre style="MARGIN: 0px"&gt;[&lt;span style="COLOR: #2b91af"&gt;ActiveRecord&lt;/span&gt;(Table = &lt;span style="COLOR: #a31515"&gt;"Customer"&lt;/span&gt;, Where=&lt;span style="COLOR: #a31515"&gt;"IsDeleted=0"&lt;/span&gt;)]&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: blue"&gt;partial&lt;/span&gt; &lt;span style="COLOR: blue"&gt;class&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;Customer&lt;/span&gt; : &lt;span style="COLOR: #2b91af"&gt;ObjectBase&lt;/span&gt;&amp;lt;&lt;span style="COLOR: #2b91af"&gt;Customer&lt;/span&gt;&amp;gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;{&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;    [&lt;span style="COLOR: #2b91af"&gt;PrimaryKey&lt;/span&gt;(Column = &lt;span style="COLOR: #a31515"&gt;"CustomerId"&lt;/span&gt;, Generator = &lt;span style="COLOR: #2b91af"&gt;PrimaryKeyType&lt;/span&gt;.GuidComb)]&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;    &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: blue"&gt;override&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;Guid&lt;/span&gt; Id { &lt;span style="COLOR: blue"&gt;get&lt;/span&gt;; &lt;span style="COLOR: blue"&gt;set&lt;/span&gt;; }&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt; &lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;    [&lt;span style="COLOR: #2b91af"&gt;Property&lt;/span&gt;(Column = &lt;span style="COLOR: #a31515"&gt;"FirstName"&lt;/span&gt;, Length = 100, NotNull = &lt;span style="COLOR: blue"&gt;true&lt;/span&gt;)]&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;    &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: blue"&gt;string&lt;/span&gt; FirstName { &lt;span style="COLOR: blue"&gt;get&lt;/span&gt;; &lt;span style="COLOR: blue"&gt;set&lt;/span&gt;; }&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt; &lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;    [&lt;span style="COLOR: #2b91af"&gt;Property&lt;/span&gt;(Column = &lt;span style="COLOR: #a31515"&gt;"LastName"&lt;/span&gt;, Length = 100, NotNull = &lt;span style="COLOR: blue"&gt;true&lt;/span&gt;)]&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;    &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: blue"&gt;string&lt;/span&gt; LastName { &lt;span style="COLOR: blue"&gt;get&lt;/span&gt;; &lt;span style="COLOR: blue"&gt;set&lt;/span&gt;; }&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt; &lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;    [&lt;span style="COLOR: #2b91af"&gt;Property&lt;/span&gt;(Column = &lt;span style="COLOR: #a31515"&gt;"Age"&lt;/span&gt;, NotNull = &lt;span style="COLOR: blue"&gt;true&lt;/span&gt;)]&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;    &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: blue"&gt;int&lt;/span&gt; Age { &lt;span style="COLOR: blue"&gt;get&lt;/span&gt;; &lt;span style="COLOR: blue"&gt;set&lt;/span&gt;; }&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt; &lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;    [&lt;span style="COLOR: #2b91af"&gt;HasMany&lt;/span&gt;(MapType = &lt;span style="COLOR: blue"&gt;typeof&lt;/span&gt;(&lt;span style="COLOR: #2b91af"&gt;Address&lt;/span&gt;), Where = &lt;span style="COLOR: #a31515"&gt;"IsDeleted=0"&lt;/span&gt;)]&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;    &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;IList&lt;/span&gt;&amp;lt;&lt;span style="COLOR: #2b91af"&gt;Address&lt;/span&gt;&amp;gt; Addresses { &lt;span style="COLOR: blue"&gt;get&lt;/span&gt;; &lt;span style="COLOR: blue"&gt;set&lt;/span&gt;; }&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;}&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;The sample project includes a console app that you can run. You'll need to modify the connection string as well as create yourself an empty database. The schema is created by the demo. &lt;/p&gt;
&lt;p&gt;You'll notice that you can use the classes without having to manually set the EditedBy and EditedDateTime properties whenver you Save/Update/Flush.&lt;/p&gt;
&lt;p&gt;The only code in the sample app that I think may require more explanation is the &lt;strong&gt;TestDelete()&lt;/strong&gt; method. &lt;/p&gt;
&lt;div class="CodeCollapse"&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;private&lt;/span&gt; &lt;span style="COLOR: blue"&gt;static&lt;/span&gt; &lt;span style="COLOR: blue"&gt;void&lt;/span&gt; TestDelete()&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;{&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;    &lt;span style="COLOR: #2b91af"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="COLOR: #a31515"&gt;"Testing delete on a fetched object..."&lt;/span&gt;);&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;    &lt;span style="COLOR: #2b91af"&gt;Customer&lt;/span&gt; customer1 = &lt;span style="COLOR: #2b91af"&gt;ActiveRecordBase&lt;/span&gt;&amp;lt;&lt;span style="COLOR: #2b91af"&gt;Customer&lt;/span&gt;&amp;gt;.FindFirst(&lt;span style="COLOR: #2b91af"&gt;Restrictions&lt;/span&gt;.Eq(&lt;span style="COLOR: #a31515"&gt;"FirstName"&lt;/span&gt;, &lt;span style="COLOR: #a31515"&gt;"Marge"&lt;/span&gt;));&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;    customer1.Delete();&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;    &lt;span style="COLOR: #2b91af"&gt;Customer&lt;/span&gt; customer2 = &lt;span style="COLOR: #2b91af"&gt;ActiveRecordBase&lt;/span&gt;&amp;lt;&lt;span style="COLOR: #2b91af"&gt;Customer&lt;/span&gt;&amp;gt;.TryFind(customer1.Id);&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;    &lt;span style="COLOR: blue"&gt;if&lt;/span&gt; (customer2 == &lt;span style="COLOR: blue"&gt;null&lt;/span&gt;)  &lt;span style="COLOR: green"&gt;//Successfully deleted, Find will only bring back entries where IsDeleted=0&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;        &lt;span style="COLOR: #2b91af"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="COLOR: #a31515"&gt;"Object succesfully \"deleted\"."&lt;/span&gt;);&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;    &lt;span style="COLOR: blue"&gt;else&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;        &lt;span style="COLOR: #2b91af"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="COLOR: #a31515"&gt;"Delete failed."&lt;/span&gt;);&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;}&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;You'll need to dive into the database and check the table directly to see that the &lt;strong&gt;IsDeleted&lt;/strong&gt; field is set to 1 to confirm that it wasn't deleted if you're not keen on believing the test :).&lt;/p&gt;
&lt;p&gt;In the next post, I'll demonstrate using SQL triggers to take advantage of the information we've added to the new base class, allow you to implement a really effective row-based audit trail.&lt;/p&gt;&lt;img src="http://www.darkside.co.za/aggbug/96.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Ryan Schreiber</dc:creator>
            <guid>http://www.darkside.co.za/archive/2009/03/12/castle-activerecord-class-hierarchy.aspx</guid>
            <pubDate>Wed, 11 Mar 2009 22:00:00 GMT</pubDate>
            <comments>http://www.darkside.co.za/archive/2009/03/12/castle-activerecord-class-hierarchy.aspx#feedback</comments>
            <slash:comments>2</slash:comments>
            <wfw:commentRss>http://www.darkside.co.za/comments/commentRss/96.aspx</wfw:commentRss>
        </item>
        <item>
            <title>GeneratorStudio and project/file layouts</title>
            <link>http://www.darkside.co.za/archive/2009/02/15/generator-studio-project-file-layouts.aspx</link>
            <description>&lt;p&gt;This is just a tip for anyone using &lt;a href="http://www.codeplex.com/generatorstudio"&gt;GeneratorStudio&lt;/a&gt; or any other code generator for their ActiveRecord classes (or any other classes, for that matter). &lt;/p&gt; &lt;p&gt;I generally have my templates set up to generate my files with the name "&amp;lt;TABLENAME&amp;gt;.Generated.cs" or something similar. In addition to this naming convention, I also make sure that my generated classes are marked as partial classes, and then I do all custom code, like additional "Find" methods methods, etc, in files named "&amp;lt;TABLENAME&amp;gt;.cs". &lt;/p&gt; &lt;p&gt;This way, when you need to regenerate anything, you can be comfortable with overwriting all the classes that are "&amp;lt;TABLENAME&amp;gt;.Generated.cs" without worrying about overwriting code that you don't want to lose.&lt;/p&gt; &lt;p&gt;You can go one step further and drop the generated files in their own folder - I name my "Generated", and I change the property named "Namespace Provider" on the folder to false.&lt;/p&gt;&lt;img src="http://www.darkside.co.za/aggbug/93.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Ryan Schreiber</dc:creator>
            <guid>http://www.darkside.co.za/archive/2009/02/15/generator-studio-project-file-layouts.aspx</guid>
            <pubDate>Sun, 15 Feb 2009 17:28:42 GMT</pubDate>
            <comments>http://www.darkside.co.za/archive/2009/02/15/generator-studio-project-file-layouts.aspx#feedback</comments>
            <wfw:commentRss>http://www.darkside.co.za/comments/commentRss/93.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Using Castle ActiveRecord and MySQL</title>
            <link>http://www.darkside.co.za/archive/2009/01/21/castle-activerecord-mysql.aspx</link>
            <description>&lt;p&gt;I’ve started some new development on the &lt;a target="_blank" href="http://www.codeplex.com/generatorstudio/"&gt;Generator Studio&lt;/a&gt; tool, and one of our big features that we felt is a real necessity is the ability to point to different database engines. With that in mind, I started off trying to get Castle ActiveRecord connecting to MySQL as part of the learning curve. Here are some pointers on getting it to work smoothly. &lt;/p&gt;
&lt;p&gt;Firstly, what' you’ll need (in addition to Castle ActiveRecord):&lt;/p&gt;
&lt;p&gt;&lt;a target="_blank" rel="nofollow" href="http://dev.mysql.com/downloads/connector/"&gt;MySQL Connector/Net&lt;/a&gt; – Version 5.2 is the latest version – I’ve can confirm that it successfully connects to MySQL server 6.0 as well.&lt;/p&gt;
&lt;p&gt;&lt;a target="_blank" href="http://dev.mysql.com/downloads/gui-tools/"&gt;MySQL GUI tools&lt;/a&gt; – These are nice to have to confirm your data/table structures, especially if you’re used to using SQL Enterprise manager.&lt;/p&gt;
&lt;p&gt;Configuring Castle ActiveRecord to use MySQL is relatively straightforward. I’ve included an example below as a quick reference.&lt;/p&gt;
&lt;div class="Code"&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;activerecord&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;  &amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;config&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;    &amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;add&lt;/span&gt;&lt;span style="COLOR: blue"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;key&lt;/span&gt;&lt;span style="COLOR: blue"&gt;=&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;connection.provider&lt;/span&gt;"&lt;span style="COLOR: blue"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;value&lt;/span&gt;&lt;span style="COLOR: blue"&gt;=&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;NHibernate.Connection.DriverConnectionProvider&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;    &amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;add&lt;/span&gt;&lt;span style="COLOR: blue"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;key&lt;/span&gt;&lt;span style="COLOR: blue"&gt;=&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;dialect&lt;/span&gt;"&lt;span style="COLOR: blue"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;value&lt;/span&gt;&lt;span style="COLOR: blue"&gt;=&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;NHibernate.Dialect.MySQLDialect&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;    &amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;add&lt;/span&gt;&lt;span style="COLOR: blue"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;key&lt;/span&gt;&lt;span style="COLOR: blue"&gt;=&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;connection.driver_class&lt;/span&gt;"&lt;span style="COLOR: blue"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;value&lt;/span&gt;&lt;span style="COLOR: blue"&gt;=&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;NHibernate.Driver.MySqlDataDriver&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;    &amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;add&lt;/span&gt;&lt;span style="COLOR: blue"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;key&lt;/span&gt;&lt;span style="COLOR: blue"&gt;=&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;connection.connection_string&lt;/span&gt;"&lt;span style="COLOR: blue"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;value&lt;/span&gt;&lt;span style="COLOR: blue"&gt;=&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;Server=Server; Database=ActiveRecordTest; User Id=root; Password=password&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;    &amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;add&lt;/span&gt;&lt;span style="COLOR: blue"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;key&lt;/span&gt;&lt;span style="COLOR: blue"&gt;=&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;show_sql&lt;/span&gt;"&lt;span style="COLOR: blue"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;value&lt;/span&gt;&lt;span style="COLOR: blue"&gt;=&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;true&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;  &amp;lt;/&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;config&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;activerecord&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;What you may get when calling any of the ActiveRecord methods is the following exception:&lt;/p&gt;
&lt;p&gt;&lt;font face="Courier" color="#ff0000"&gt;NHibernate.HibernateException: Could not create the driver from NHibernate.Driver.MySqlDataDriver. ---&amp;gt;  System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---&amp;gt;  NHibernate.HibernateException: The IDbCommand and IDbConnection implementation in the assembly MySql.Data could not be found. Ensure that the assembly MySql.Data is located in the application directory or in the Global Assembly Cache. If the assembly is in the GAC, use &amp;lt;qualifyAssembly/&amp;gt; element in the application configuration file to specify the full name of the assembly.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;There are two ways of fixing this, as is implied in the exception:&lt;/p&gt;
&lt;ol&gt;
    &lt;li&gt;Copy the file locally (to your bin folder) &lt;/li&gt;
    &lt;li&gt;Use &amp;lt;qualifyAssembly/&amp;gt; in your config file &lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The actual section that needs to be added to your config file looks like this:&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;div class="Code"&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;runtime&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;  &amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;assemblyBinding&lt;/span&gt;&lt;span style="COLOR: blue"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;xmlns&lt;/span&gt;&lt;span style="COLOR: blue"&gt;=&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;urn:schemas-microsoft-com:asm.v1&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;    &amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;qualifyAssembly&lt;/span&gt;&lt;span style="COLOR: blue"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;partialName&lt;/span&gt;&lt;span style="COLOR: blue"&gt;=&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;MySql.Data&lt;/span&gt;"&lt;span style="COLOR: blue"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;fullName&lt;/span&gt;&lt;span style="COLOR: blue"&gt;=&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;MySql.Data, Version=5.2.5.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;  &amp;lt;/&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;assemblyBinding&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;runtime&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;If you’re not sure of the values for Version and PublicKeyToken, you can browse to “C:\WINDOWS\assembly”, find the “MySQL.Data” entry, and it will have both the values there.&lt;/p&gt;
&lt;p&gt;That’s it – you should be connecting to MySQL using NHibernate/ActiveRecord by now :)&lt;/p&gt;&lt;img src="http://www.darkside.co.za/aggbug/81.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Ryan Schreiber</dc:creator>
            <guid>http://www.darkside.co.za/archive/2009/01/21/castle-activerecord-mysql.aspx</guid>
            <pubDate>Tue, 20 Jan 2009 22:00:00 GMT</pubDate>
            <comments>http://www.darkside.co.za/archive/2009/01/21/castle-activerecord-mysql.aspx#feedback</comments>
            <wfw:commentRss>http://www.darkside.co.za/comments/commentRss/81.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Castle ActiveRecord and Linq</title>
            <link>http://www.darkside.co.za/archive/2009/01/17/castle-activerecord-linq.aspx</link>
            <description>&lt;h3&gt;Introduction&lt;/h3&gt;
&lt;p&gt;I've been having a look at the &lt;a href="http://nhcontrib.sourceforge.net/"&gt;NHibernate contributions project&lt;/a&gt; on SourceForge and decided to give the NHibernate.Linq project a whirl. After some initial tests, I have to say I'm very impressed. There are some limitations that are actually the result of NHibernate, not the Linq project, but nothing serious enough for me not to use it.&lt;/p&gt;
&lt;p&gt;My next logical progression was to find out how to make use of NHiberntate.Linq in Castle ActiveRecord. Some very quick searching revealed this article from Matt (&lt;a href="http://trycatchfail.com/blog/post/2008/08/19/Using-LINQ-with-ActiveRecord.aspx"&gt;http://trycatchfail.com/blog/post/2008/08/19/Using-LINQ-with-ActiveRecord.aspx&lt;/a&gt;) on how to build all the relevant projects, their dependencies and finally how to use it.&lt;/p&gt;
&lt;p&gt;I followed all the steps, which are relatively straight forward once you have castle building, and managed to get a working set of binaries to start my ActiveRecord.Linq work :) I've done the build using the following revisions/versions:&lt;/p&gt;
&lt;p&gt;NHiberntate - 2.1.0.1001 GA&lt;br /&gt;
NHibernate.Linq - Rev 695 (&lt;a href="https://nhcontrib.svn.sourceforge.net/svnroot/nhcontrib/trunk/src/NHibernate.Linq "&gt;source code&lt;/a&gt;)&lt;br /&gt;
Castle Project  - Rev 5496 (&lt;a href="http://svn.castleproject.org:8080/svn/castle/trunk/"&gt;source code&lt;/a&gt;) &lt;/p&gt;
&lt;h3&gt;Download&lt;/h3&gt;
&lt;p&gt;I've made this set of binaries available for &lt;a href="http://www.darkside.co.za/files/Castle.ActiveRecord.1.0.3.5496.zip"&gt;download here&lt;/a&gt; for those who'd like to just get going rather.&lt;/p&gt;
&lt;h3&gt;Code&lt;/h3&gt;
&lt;p&gt;One of the additions you'll need to make to your project if you're going to use Castle ActiveRecord with NHibernate.Linq is a class that gives you access to the underlying NHIbernat.Linq context. I've modified the original example provided by Matt to better suite what I had planned for it.&lt;/p&gt;
&lt;div class="CodeCollapse"&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; &lt;/span&gt;&lt;span style="COLOR: gray"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; Idea originally from http://trycatchfail.com/blog/post/2008/08/19/Using-LINQ-with-ActiveRecord.aspx&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; &lt;/span&gt;&lt;span style="COLOR: gray"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: blue"&gt;sealed&lt;/span&gt; &lt;span style="COLOR: blue"&gt;class&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;ActiveRecordLinqContext&lt;/span&gt; : &lt;span style="COLOR: #2b91af"&gt;NHibernateContext&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;{&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;    &lt;span style="COLOR: blue"&gt;private&lt;/span&gt; ActiveRecordLinqContext() : &lt;span style="COLOR: blue"&gt;base&lt;/span&gt;(GetSession()){}&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt; &lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;    &lt;span style="COLOR: gray"&gt;///&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;    &lt;span style="COLOR: gray"&gt;///&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;    &lt;span style="COLOR: gray"&gt;///&amp;lt;typeparam name="T"&amp;gt;&amp;lt;/typeparam&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;    &lt;span style="COLOR: gray"&gt;///&amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;    &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: blue"&gt;static&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;INHibernateQueryable&lt;/span&gt;&amp;lt;T&amp;gt; Linq&amp;lt;T&amp;gt;() &lt;span style="COLOR: blue"&gt;where&lt;/span&gt; T: &lt;span style="COLOR: #2b91af"&gt;ActiveRecordBase&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;    {&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;        &lt;span style="COLOR: blue"&gt;return&lt;/span&gt; (&lt;span style="COLOR: #2b91af"&gt;SingletonCreator&lt;/span&gt;.Instance.Session.Linq&amp;lt;T&amp;gt;());&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;    }&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt; &lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;    &lt;span style="COLOR: blue"&gt;private&lt;/span&gt; &lt;span style="COLOR: blue"&gt;static&lt;/span&gt; &lt;span style="COLOR: blue"&gt;class&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;SingletonCreator&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;    {&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;        &lt;span style="COLOR: blue"&gt;internal&lt;/span&gt; &lt;span style="COLOR: blue"&gt;static&lt;/span&gt; &lt;span style="COLOR: blue"&gt;readonly&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;ActiveRecordLinqContext&lt;/span&gt; Instance = &lt;span style="COLOR: blue"&gt;new&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;ActiveRecordLinqContext&lt;/span&gt;();&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;    }&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt; &lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;    &lt;span style="COLOR: blue"&gt;private&lt;/span&gt; &lt;span style="COLOR: blue"&gt;static&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;ISession&lt;/span&gt; GetSession()&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;    {&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;        &lt;span style="COLOR: blue"&gt;if&lt;/span&gt; (&lt;span style="COLOR: #2b91af"&gt;SessionScope&lt;/span&gt;.Current == &lt;span style="COLOR: blue"&gt;null&lt;/span&gt;)&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;            &lt;span style="COLOR: blue"&gt;throw&lt;/span&gt; &lt;span style="COLOR: blue"&gt;new&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;InvalidOperationException&lt;/span&gt;(&lt;span style="COLOR: #a31515"&gt;"No active SessionScope found."&lt;/span&gt;);&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt; &lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;        &lt;span style="COLOR: blue"&gt;return&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;ActiveRecordMediator&lt;/span&gt;.GetSessionFactoryHolder().CreateSession(&lt;span style="COLOR: blue"&gt;typeof&lt;/span&gt;(&lt;span style="COLOR: #2b91af"&gt;ActiveRecordBase&lt;/span&gt;));&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;    }&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;}&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;And you can then make use of this code like this (I've included an ActiveRecord class as well):&lt;/p&gt;
&lt;div class="CodeCollapse"&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: blue"&gt;class&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;TestItem&lt;/span&gt;: &lt;span style="COLOR: #2b91af"&gt;ActiveRecordBase&lt;/span&gt;&amp;lt;&lt;span style="COLOR: #2b91af"&gt;TestItem&lt;/span&gt;&amp;gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;{&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;    [&lt;span style="COLOR: #2b91af"&gt;PrimaryKey&lt;/span&gt; (Generator = &lt;span style="COLOR: #2b91af"&gt;PrimaryKeyType&lt;/span&gt;.Identity)]&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;    &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: blue"&gt;int&lt;/span&gt; Id { &lt;span style="COLOR: blue"&gt;get&lt;/span&gt;; &lt;span style="COLOR: blue"&gt;set&lt;/span&gt;; }&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt; &lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;    [&lt;span style="COLOR: #2b91af"&gt;Property&lt;/span&gt;]&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;    &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: blue"&gt;string&lt;/span&gt; ItemName { &lt;span style="COLOR: blue"&gt;get&lt;/span&gt;; &lt;span style="COLOR: blue"&gt;set&lt;/span&gt;; } &lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt; &lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;    [&lt;span style="COLOR: #2b91af"&gt;Property&lt;/span&gt;]&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;    &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: blue"&gt;string&lt;/span&gt; ItemDescription {&lt;span style="COLOR: blue"&gt;get&lt;/span&gt;; &lt;span style="COLOR: blue"&gt;set&lt;/span&gt;;} &lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt; &lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;    &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;TestItem&lt;/span&gt;[] GetTestItemsNamedBob ()&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;    {&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;        &lt;span style="COLOR: blue"&gt;var&lt;/span&gt; testItems = (&lt;span style="COLOR: blue"&gt;from&lt;/span&gt; ti &lt;span style="COLOR: blue"&gt;in&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;ActiveRecordLinqContext&lt;/span&gt;.Linq&amp;lt;&lt;span style="COLOR: #2b91af"&gt;TestItem&lt;/span&gt;&amp;gt;() &lt;span style="COLOR: blue"&gt;where&lt;/span&gt; ti.ItemName == &lt;span style="COLOR: #a31515"&gt;"Bob"&lt;/span&gt; &lt;span style="COLOR: blue"&gt;select&lt;/span&gt; ti).ToArray();&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;        &lt;span style="COLOR: blue"&gt;return&lt;/span&gt; (testItems);&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;    }&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt; &lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt; &lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt; &lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;    &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: blue"&gt;string&lt;/span&gt;[] GetNamesOfAllTestItems()&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;    {&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;        &lt;span style="COLOR: blue"&gt;var&lt;/span&gt; testItemNames = (&lt;span style="COLOR: blue"&gt;from&lt;/span&gt; ti &lt;span style="COLOR: blue"&gt;in&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;ActiveRecordLinqContext&lt;/span&gt;.Linq&amp;lt;&lt;span style="COLOR: #2b91af"&gt;TestItem&lt;/span&gt;&amp;gt;() &lt;span style="COLOR: blue"&gt;select&lt;/span&gt; ti.ItemName).ToArray();&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;        &lt;span style="COLOR: blue"&gt;return&lt;/span&gt; (testItemNames);&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;    }&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;}&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;In the code above, I've have two calls; The first (GetTestItemsNamedBob()) returns an array of ItemTest classes. The linq query in that method is functionally quivalent to the following code:&lt;/p&gt;
&lt;div class="Code"&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;TestItem&lt;/span&gt;[] GetTestItemsNamedBob()&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;{&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;    &lt;span style="COLOR: blue"&gt;var&lt;/span&gt; testItems = FindAll(&lt;span style="COLOR: blue"&gt;new&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;ICriterion&lt;/span&gt;[] {&lt;span style="COLOR: #2b91af"&gt;Restrictions&lt;/span&gt;.Eq(&lt;span style="COLOR: #a31515"&gt;"ItemName"&lt;/span&gt;, &lt;span style="COLOR: #a31515"&gt;"Bob"&lt;/span&gt;)});&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;    &lt;span style="COLOR: blue"&gt;return&lt;/span&gt; (testItems);&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;}&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;What is really cool is in the second method. If you turn on the show_sql in your ActiveRecord configuration, you'll notice that the sql that is actually sent to the server is ONLY for the field "ItemName", and that the data returned is simply a list of names and not all the data for all the fields, which is the case for normal NHibernate/ActiveRecord queries.&lt;/p&gt;
&lt;p&gt; Thanks again to &lt;a href="http://trycatchfail.com/blog/author/Matt.aspx"&gt;Matt &lt;/a&gt;(and also to &lt;a href="http://www.kenegozi.com/Blog/2007/11/18/activerecord-dot-linq-naive-but-working.aspx"&gt;Ken Egozi&lt;/a&gt; who started Matt off in the right direction) for the idea and instructions.&lt;/p&gt;&lt;img src="http://www.darkside.co.za/aggbug/65.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Ryan Schreiber</dc:creator>
            <guid>http://www.darkside.co.za/archive/2009/01/17/castle-activerecord-linq.aspx</guid>
            <pubDate>Fri, 16 Jan 2009 22:00:00 GMT</pubDate>
            <comments>http://www.darkside.co.za/archive/2009/01/17/castle-activerecord-linq.aspx#feedback</comments>
            <wfw:commentRss>http://www.darkside.co.za/comments/commentRss/65.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Castle ActiveRecord - Using CreateSchema()</title>
            <link>http://www.darkside.co.za/archive/2008/12/09/castle-activerecord-using-createschema.aspx</link>
            <description>&lt;p&gt;When running unit tests, I often using &lt;font face="Courier New"&gt;ActiveRecordStarter.CreateSchema()&lt;/font&gt; in my test startups to give me a clean database to work from. Whether or not this should be done by a SQL script or a restore from a backup is for another time.&lt;/p&gt;
&lt;p&gt;On one such occasion, I started getting a '&lt;em&gt;binary or string data would be truncated&lt;/em&gt;' error being thrown and on closer inspection, I noticed it was because of a certain column that was originally &lt;font face="Courier New"&gt;nvarchar (&lt;font color="#0000ff"&gt;max&lt;/font&gt;)&lt;/font&gt; by design, but had been recreated by ActiveRecord as &lt;font face="Courier New"&gt;nvarchar (255)&lt;/font&gt;.&lt;/p&gt;
&lt;p&gt;A quick Google found many folks having this problem and the solutions varied from changing the data type to NTEXT or StringClob, to setting the length of the field to &lt;font face="Courier New"&gt;Int32.Max,&lt;/font&gt;however, none of them were directly solving the issue at hand.&lt;/p&gt;
&lt;p&gt;The easiest way to remedy this is to make use of the SqlType parameter in the Property attribute of ActiveRecord when declaring your properties. &lt;/p&gt;
&lt;div class="Code"&gt;
&lt;pre style="MARGIN: 0px"&gt;[Property(&lt;span style="COLOR: #a31515"&gt;"DataField"&lt;/span&gt;, ColumnType=&lt;span style="COLOR: #a31515"&gt;"String"&lt;/span&gt;, NotNull=&lt;span style="COLOR: blue"&gt;true&lt;/span&gt;, SqlType = &lt;span style="COLOR: #a31515"&gt;"nvarchar (max)"&lt;/span&gt;)]&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: blue"&gt;virtual&lt;/span&gt; &lt;span style="COLOR: blue"&gt;string&lt;/span&gt; Data { &lt;span style="COLOR: blue"&gt;get&lt;/span&gt; ; &lt;span style="COLOR: blue"&gt;set&lt;/span&gt;; }&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;Now, when you call &lt;font face="Courier New"&gt;ActiveRecord.CreateSchema(),&lt;/font&gt; the column will be created correctly.&lt;!--EndFragment--&gt;&lt;/p&gt;&lt;img src="http://www.darkside.co.za/aggbug/64.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Ryan Schreiber</dc:creator>
            <guid>http://www.darkside.co.za/archive/2008/12/09/castle-activerecord-using-createschema.aspx</guid>
            <pubDate>Tue, 09 Dec 2008 05:32:04 GMT</pubDate>
            <comments>http://www.darkside.co.za/archive/2008/12/09/castle-activerecord-using-createschema.aspx#feedback</comments>
            <wfw:commentRss>http://www.darkside.co.za/comments/commentRss/64.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Generator Studio released on CodePlex</title>
            <link>http://www.darkside.co.za/archive/2008/10/30/generator-studio-released-on-codeplex.aspx</link>
            <description>&lt;p&gt;Generator Studio is a code generation tool (yes, another one one, but more on that later) that allows you to set up templates using the Velocity Template Language, and then generates files based on your source database structure. It can be found &lt;a href="http://www.codeplex.com/generatorstudio"&gt;here on CodePlex&lt;/a&gt; and the Pre-Beta 0.1 can be &lt;a href="http://www.codeplex.com/generatorstudio/Release/ProjectReleases.aspx?ReleaseId=18896"&gt;downloaded here&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;WARNING: It's very beta. Its generates well (we think), but we have a host of features/fixes that we'd like to add in the future. At present, it's being contributed to by FryHard (a.k.a. Brendan Fry) and I, and we tackle it in our spare time.Top of our list is to tidy up the UI side, and implement ALL of the sql calls using NHibernate/ActiveRecord. You may notice some inline SQL statements that, at present, I haven't managed to work around (mostly because of time constraints :)).&lt;/p&gt;
&lt;p&gt;Why another generator application? I agree fully with the thoughts around the "&lt;a href="http://en.wikipedia.org/wiki/Reinventing_the_wheel"&gt;Reinventing-the-wheel&lt;/a&gt;" anti-pattern - developing something that is already out there, but you don't like it because you didn't write it, is stoopid. &lt;strong&gt;BUT&lt;/strong&gt;. I started this many years back in some-or-other form, and in recent times I've struggled to find an open-source project the generates what I want. So here it is.&lt;/p&gt;
&lt;p&gt;Use it. Don't use it. Send us templates. Check back here/codeplex to find new templates.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;UPDATE: 2008 NOV 03 &lt;/strong&gt;4 extra templates have been added to the source - 2 for creating audit tables for your database (one style using a GUID as the PK for the audit tables, the other using an identity column) and the other two for generating the corresponding triggers to populate these tables. &lt;/p&gt;&lt;img src="http://www.darkside.co.za/aggbug/61.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Ryan Schreiber</dc:creator>
            <guid>http://www.darkside.co.za/archive/2008/10/30/generator-studio-released-on-codeplex.aspx</guid>
            <pubDate>Thu, 30 Oct 2008 05:47:39 GMT</pubDate>
            <comments>http://www.darkside.co.za/archive/2008/10/30/generator-studio-released-on-codeplex.aspx#feedback</comments>
            <wfw:commentRss>http://www.darkside.co.za/comments/commentRss/61.aspx</wfw:commentRss>
            <enclosure url="http://www.codeplex.com/generatorstudio/Release/ProjectReleases.aspx?ReleaseId=18896" length="1257472" type="application/octetstream" />
        </item>
        <item>
            <title>Castle ActiveRecord - Using an identity/computed/default column </title>
            <link>http://www.darkside.co.za/archive/2008/10/23/castle-activerecord-using-identity-computed-default-column.aspx</link>
            <description>&lt;p&gt;To expand on the title a bit: What if I have an identity column in a table, but it isn’t my primary key? Or what if I have a computed column or default value for a column, and need to use the value as soon as I’ve created/saved/updated?&lt;/p&gt;
&lt;p&gt;Firstly, you need to make sure that ActiveRecord doesn’t update or insert any values for this column. In my example, I've created an Invoice class/table which has a Guid as the primary, and makes use of a column named Reference which is in fact an identity column in the database table. &lt;/p&gt;
&lt;div class="Code"&gt;
&lt;pre style="MARGIN: 0px"&gt;[&lt;span style="COLOR: #2b91af"&gt;Property&lt;/span&gt;(Column = &lt;span style="COLOR: #a31515"&gt;"Reference"&lt;/span&gt;, Insert = &lt;span style="COLOR: blue"&gt;false&lt;/span&gt;, Update = &lt;span style="COLOR: blue"&gt;false&lt;/span&gt;)]&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: blue"&gt;int&lt;/span&gt; Reference { &lt;span style="COLOR: blue"&gt;get&lt;/span&gt;; &lt;span style="COLOR: blue"&gt;set&lt;/span&gt;; }&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;Next, you need to override the "PostFlush" method of your class, in which we check to see if the record needs to be refreshed. Here is the entire working (watered down) class: &lt;/p&gt;
&lt;div class="CodeCollapse"&gt;
&lt;pre style="MARGIN: 0px"&gt;[&lt;span style="COLOR: #2b91af"&gt;ActiveRecord&lt;/span&gt;]&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: blue"&gt;class&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;Invoice&lt;/span&gt; : &lt;span style="COLOR: #2b91af"&gt;ActiveRecordBase&lt;/span&gt;&amp;lt;&lt;span style="COLOR: #2b91af"&gt;Invoice&lt;/span&gt;&amp;gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;{&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;    [&lt;span style="COLOR: #2b91af"&gt;PrimaryKey&lt;/span&gt;(&lt;span style="COLOR: #2b91af"&gt;PrimaryKeyType&lt;/span&gt;.GuidComb, Column = &lt;span style="COLOR: #a31515"&gt;"InvoiceId"&lt;/span&gt;)]&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;    &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;Guid&lt;/span&gt; Id { &lt;span style="COLOR: blue"&gt;get&lt;/span&gt;; &lt;span style="COLOR: blue"&gt;set&lt;/span&gt;; }&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt; &lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;    [&lt;span style="COLOR: #2b91af"&gt;Property&lt;/span&gt;(Column = &lt;span style="COLOR: #a31515"&gt;"Reference"&lt;/span&gt;, Insert = &lt;span style="COLOR: blue"&gt;false&lt;/span&gt;, Update = &lt;span style="COLOR: blue"&gt;false&lt;/span&gt;)]&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;    &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: blue"&gt;int&lt;/span&gt; Reference { &lt;span style="COLOR: blue"&gt;get&lt;/span&gt;; &lt;span style="COLOR: blue"&gt;set&lt;/span&gt;; }&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt; &lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;    &lt;span style="COLOR: blue"&gt;protected&lt;/span&gt; &lt;span style="COLOR: blue"&gt;override&lt;/span&gt; &lt;span style="COLOR: blue"&gt;void&lt;/span&gt; PostFlush()&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;    {&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;        &lt;span style="COLOR: blue"&gt;base&lt;/span&gt;.PostFlush();&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;        &lt;span style="COLOR: blue"&gt;if&lt;/span&gt; (&lt;span style="COLOR: blue"&gt;this&lt;/span&gt;.Reference == 0)&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;        {&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;            &lt;span style="COLOR: blue"&gt;using&lt;/span&gt; (&lt;span style="COLOR: blue"&gt;new&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;SessionScope&lt;/span&gt;(&lt;span style="COLOR: #2b91af"&gt;FlushAction&lt;/span&gt;.Never))&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;                Refresh();&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;        }&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;    }&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;}&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;&lt;!--EndFragment--&gt;&lt;/p&gt;
&lt;p&gt;You'll notice that I create a new session scope with the flushaction set to never; this is to prevent (a) the PostFlush from being fired twice on your current object and (2) stops a "System.InvalidOperationException: Collection was modified; enumeration operation may not execute" exception from being thrown if your class is in a collection of child objects belonging to another ActiveRecord class.&lt;/p&gt;&lt;img src="http://www.darkside.co.za/aggbug/60.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Ryan Schreiber</dc:creator>
            <guid>http://www.darkside.co.za/archive/2008/10/23/castle-activerecord-using-identity-computed-default-column.aspx</guid>
            <pubDate>Thu, 23 Oct 2008 08:08:12 GMT</pubDate>
            <comments>http://www.darkside.co.za/archive/2008/10/23/castle-activerecord-using-identity-computed-default-column.aspx#feedback</comments>
            <wfw:commentRss>http://www.darkside.co.za/comments/commentRss/60.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Castle ActiveRecord - Lazy Loading and session scopes in the web</title>
            <link>http://www.darkside.co.za/archive/2008/10/10/castle-activerecord-lazy-loading-session-scopes-web.aspx</link>
            <description>&lt;p&gt;This is the third post I'm doing related to a Castle ActiveRecord/NHibernate/lazy loading/sessionscope error that occurs. The first two are &lt;a href="http://www.darkside.co.za/archive/2007/11/29/castle-activerecord-lazy-loading-session-scopes.aspx"&gt;here&lt;/a&gt; and &lt;a href="http://www.darkside.co.za/archive/2008/09/09/castle-activerecord-lazy-loading-session-scopes-again.aspx"&gt;here&lt;/a&gt;. &lt;/p&gt;
&lt;p&gt;I received a mail the other day about an ActiveRecord/NHibernate error begin thrown in an application (web application, actually), which subsequently turned out to be another instance of the "failed to lazily initialize a collection, no session or session was closed" error. While browsing through the ActiveRecord source code when trying to solve the previous sessionscope problems I'd had, I came across an HttpModule called "SessionScopeWebModule" in the Castle.ActiveRecord.Framework namespace, and so the lightbulb switched on. I did a quick search for more info on this module at &lt;a href="http://www.castleproject.org"&gt;castleproject.org&lt;/a&gt; and found &lt;a href="http://www.castleproject.org/ActiveRecord/documentation/v1rc1/usersguide/web.html"&gt;this article&lt;/a&gt;. &lt;/p&gt;
&lt;p&gt;You simply add the module in as you'd do for any HttpModule, as follows:&lt;/p&gt;
&lt;div class="Code"&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;httpModules&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;  &amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;add&lt;/span&gt;&lt;span style="COLOR: blue"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;name&lt;/span&gt;&lt;span style="COLOR: blue"&gt;=&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;ar.sessionscope&lt;/span&gt;"&lt;span style="COLOR: blue"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;type&lt;/span&gt;&lt;span style="COLOR: blue"&gt;=&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;Castle.ActiveRecord.Framework.SessionScopeWebModule, Castle.ActiveRecord&lt;/span&gt;"&lt;span style="COLOR: blue"&gt; /&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;httpModules&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;&lt;!--EndFragment--&gt; When you initialise the ActiveRecord framework, however, you still get an error related to the fact that you don't have the "isWeb" attribute set to true. That's simply remedied by modifying the configuration section for ActiveRecord as follows:&lt;/p&gt;
&lt;div class="Code"&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;activerecord&lt;/span&gt;&lt;span style="COLOR: blue"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;isWeb&lt;/span&gt;&lt;span style="COLOR: blue"&gt;=&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;true&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;  &amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;config&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;    &amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;add&lt;/span&gt;&lt;span style="COLOR: blue"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;key&lt;/span&gt;&lt;span style="COLOR: blue"&gt;=&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;connection.provider&lt;/span&gt;"&lt;span style="COLOR: blue"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;value&lt;/span&gt;&lt;span style="COLOR: blue"&gt;=&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;NHibernate.Connection.DriverConnectionProvider&lt;/span&gt;"&lt;span style="COLOR: blue"&gt; /&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;    &amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;add&lt;/span&gt;&lt;span style="COLOR: blue"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;key&lt;/span&gt;&lt;span style="COLOR: blue"&gt;=&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;dialect&lt;/span&gt;"&lt;span style="COLOR: blue"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;value&lt;/span&gt;&lt;span style="COLOR: blue"&gt;=&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;NHibernate.Dialect.MsSql2005Dialect&lt;/span&gt;"&lt;span style="COLOR: blue"&gt; /&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;    &amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;add&lt;/span&gt;&lt;span style="COLOR: blue"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;key&lt;/span&gt;&lt;span style="COLOR: blue"&gt;=&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;connection.driver_class&lt;/span&gt;"&lt;span style="COLOR: blue"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;value&lt;/span&gt;&lt;span style="COLOR: blue"&gt;=&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;NHibernate.Driver.SqlClientDriver&lt;/span&gt;"&lt;span style="COLOR: blue"&gt; /&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;    &amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;add&lt;/span&gt;&lt;span style="COLOR: blue"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;key&lt;/span&gt;&lt;span style="COLOR: blue"&gt;=&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;connection.connection_string&lt;/span&gt;"&lt;span style="COLOR: blue"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;value&lt;/span&gt;&lt;span style="COLOR: blue"&gt;=&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;Server=(local);initial catalog=myDatabase;Integrated Security=SSPI&lt;/span&gt;"&lt;span style="COLOR: blue"&gt; /&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;    &amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;add&lt;/span&gt;&lt;span style="COLOR: blue"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;key&lt;/span&gt;&lt;span style="COLOR: blue"&gt;=&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;show_sql&lt;/span&gt;"&lt;span style="COLOR: blue"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;value&lt;/span&gt;&lt;span style="COLOR: blue"&gt;=&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;false&lt;/span&gt;"&lt;span style="COLOR: blue"&gt; /&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;  &amp;lt;/&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;config&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;activerecord&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;&lt;!--EndFragment--&gt;&lt;/p&gt;&lt;img src="http://www.darkside.co.za/aggbug/54.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Ryan Schreiber</dc:creator>
            <guid>http://www.darkside.co.za/archive/2008/10/10/castle-activerecord-lazy-loading-session-scopes-web.aspx</guid>
            <pubDate>Thu, 09 Oct 2008 22:00:00 GMT</pubDate>
            <comments>http://www.darkside.co.za/archive/2008/10/10/castle-activerecord-lazy-loading-session-scopes-web.aspx#feedback</comments>
            <slash:comments>1</slash:comments>
            <wfw:commentRss>http://www.darkside.co.za/comments/commentRss/54.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Castle ActiveRecord - more on Lazy Loading and session scopes</title>
            <link>http://www.darkside.co.za/archive/2008/09/09/castle-activerecord-lazy-loading-session-scopes-again.aspx</link>
            <description>&lt;p&gt;This is a follow-up post on an article from a few months back located &lt;a href="http://www.darkside.co.za/archive/2007/11/29/castle-activerecord-lazy-loading-session-scopes.aspx "&gt;here&lt;/a&gt; and hopefully expands on how to overcome the error "failed to lazily initialize a collection, no session or session was closed" which I get very often in WinForms development. This error generally gets thrown when the object you are trying to lazily fetch a list for has become disconnected. The example and workaround I discussed previously was around instantiating a SessionScope object in the windows form, which stayed in scope for the duration of the form. While trying to improve on the UI design, I moved the lazy fetching, etc, to run asynchronously. All of a sudden, the lazy load errors were back and quite a stack of debugging ensued.&lt;/p&gt;
&lt;p&gt;Initially, I borrowed a test WinForms application that loaded a master-detail set of data asynchronously from &lt;a href="http://blog.fryhard.com/archive/2008/09/11/castle_activerecord_asycn_data_fetching.aspx"&gt;FryHard&lt;/a&gt; (his POC for Castle/AR/Asynchronous UI) to test my lazy loading trial-and-error solutions. I then tracked down the area of the code that I thought was the culprit (in the ActiveRecord source, file ThreadScopeInfo.cs):&lt;/p&gt;
&lt;div class="Code"&gt;
&lt;pre style="MARGIN: 0px"&gt;[&lt;span style="COLOR: #2b91af"&gt;ThreadStatic&lt;/span&gt;] &lt;span style="COLOR: blue"&gt;static&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;Stack&lt;/span&gt; stack;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;The above line was the internal stack variable that held instances of the SessionScope class and, more importantly, the [ThreadStatic] attribute indicated to me that this was on a per-thread basis, meaning that the "static-ness" of the variable was confined to the thread it was on. This was easy enough for me to change, but I certainly didn't want to have my own modified copy of ActiveRecord to maintain. Castle ActiveRecord has many places to add your own hooks into, so the search for where to implement my own ThreadScopeInfo class was pretty short. I added a handler to the "SessionFactorHolderCreated" event on the ActiveRecordStarter class and in the handler, hook up my new ThreadScopeInfo class.&lt;/p&gt;
&lt;div class="Code"&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;private&lt;/span&gt; &lt;span style="COLOR: blue"&gt;static&lt;/span&gt; &lt;span style="COLOR: blue"&gt;void&lt;/span&gt; Main()&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;{&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;    &lt;span style="COLOR: #2b91af"&gt;ActiveRecordStarter&lt;/span&gt;.SessionFactoryHolderCreated += ActiveRecordStarter_SessionFactoryHolderCreated;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;    &lt;span style="COLOR: #2b91af"&gt;ActiveRecordStarter&lt;/span&gt;.Initialize(&lt;span style="COLOR: #2b91af"&gt;Assembly&lt;/span&gt;.GetExecutingAssembly(), &lt;span style="COLOR: #2b91af"&gt;ActiveRecordSectionHandler&lt;/span&gt;.Instance);&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;}&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt; &lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;static&lt;/span&gt; &lt;span style="COLOR: blue"&gt;void&lt;/span&gt; ActiveRecordStarter_SessionFactoryHolderCreated(Castle.ActiveRecord.Framework.&lt;span style="COLOR: #2b91af"&gt;ISessionFactoryHolder&lt;/span&gt; holder)&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;{&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;    holder.ThreadScopeInfo = &lt;span style="COLOR: blue"&gt;new&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;ThreadScopeInfo&lt;/span&gt;();&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;} &lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;It's important to note that the event needs to be hooked up before initialize is called. My first-try implementation of the new ThreadScopeInfo was pretty simple: Implement the new stack, and make sure the initialisation is thread-safe.&lt;/p&gt;
&lt;div class="CodeCollapse"&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: blue"&gt;sealed&lt;/span&gt; &lt;span style="COLOR: blue"&gt;class&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;ThreadScopeInfo&lt;/span&gt; : AbstractThreadScopeInfo&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;{&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;    &lt;span style="COLOR: blue"&gt;private&lt;/span&gt; &lt;span style="COLOR: blue"&gt;static&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;Stack&lt;/span&gt; stack;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;    &lt;span style="COLOR: blue"&gt;private&lt;/span&gt; &lt;span style="COLOR: blue"&gt;static&lt;/span&gt; &lt;span style="COLOR: blue"&gt;object&lt;/span&gt; _SyncLock = &lt;span style="COLOR: blue"&gt;new&lt;/span&gt; &lt;span style="COLOR: blue"&gt;object&lt;/span&gt;();&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;    &lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; &lt;/span&gt;&lt;span style="COLOR: gray"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;    &lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; Gets the current stack.&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;    &lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; &lt;/span&gt;&lt;span style="COLOR: gray"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;    &lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; &lt;/span&gt;&lt;span style="COLOR: gray"&gt;&amp;lt;value&amp;gt;&lt;/span&gt;&lt;span style="COLOR: green"&gt;The current stack.&lt;/span&gt;&lt;span style="COLOR: gray"&gt;&amp;lt;/value&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;    &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: blue"&gt;override&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;Stack&lt;/span&gt; CurrentStack&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;    {&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;        &lt;span style="COLOR: blue"&gt;get&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;        {&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;            &lt;span style="COLOR: blue"&gt;if&lt;/span&gt; (stack == &lt;span style="COLOR: blue"&gt;null&lt;/span&gt;)&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;            {&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;                &lt;span style="COLOR: blue"&gt;lock&lt;/span&gt; (_SyncLock)&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;                {&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;                    &lt;span style="COLOR: blue"&gt;if&lt;/span&gt; (stack == &lt;span style="COLOR: blue"&gt;null&lt;/span&gt;)&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;                    {&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;                        stack = &lt;span style="COLOR: blue"&gt;new&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;Stack&lt;/span&gt;();&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;                    }&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;                }&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;            }&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;            &lt;span style="COLOR: blue"&gt;return&lt;/span&gt; stack;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;        }&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;    }&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;}&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;This solution worked well on the test project, and all the test cases I had added passed and the dreaded lazy-load error had dissapeared. However, when I moved it over into the project it was originally intended for, it was back again. For me, this meant going back to the drawing board. The reason I've posted this initial solution, albeit that it doesn't work properly in all cases, is that it is a suitable solution for light-weight WinForm applications.&lt;/p&gt;
&lt;p&gt;Back to the problem: what was happening in the application was that many async operations were running at once (aside: Yes, my load testing in the test app was lacking. Or shocking. Or Both ;) ) Delving into the ActiveRecord code again, it was clear that the problem was happening in the AbstractThreadScopeInfo class, in the &lt;font size="2"&gt;GetRegisteredScope() method.&lt;/font&gt; When this method is called by the mechanism doing the lazy load, it returns a null value, which in turn maps back to the "no session" part of the message.&lt;/p&gt;
&lt;p&gt;I then decided to craft my own ThreadScopeInfo from scratch, implementing the IThreadScopeInfo interface rather than inheriting the AbstractThreadScopeInfo class as before. In actual fact, very little ended up being from scratch; I used the innards from the AbstractThreadScopeInfo, modifying the portions I deemed necessary. The resultant class looks like this:&lt;/p&gt;
&lt;div class="CodeCollapse"&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: blue"&gt;class&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;ThreadScopeInfo&lt;/span&gt; : &lt;span style="COLOR: #2b91af"&gt;IThreadScopeInfo&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;{&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;    &lt;span style="COLOR: blue"&gt;private&lt;/span&gt; &lt;span style="COLOR: blue"&gt;readonly&lt;/span&gt; &lt;span style="COLOR: blue"&gt;object&lt;/span&gt; _SyncLock;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;    &lt;span style="COLOR: blue"&gt;private&lt;/span&gt; &lt;span style="COLOR: blue"&gt;readonly&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;Stack&lt;/span&gt; _CurrentStack;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt; &lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;    &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; ThreadScopeInfo()&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;    {&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;        _CurrentStack = &lt;span style="COLOR: blue"&gt;new&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;Stack&lt;/span&gt;();&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;        _SyncLock = &lt;span style="COLOR: blue"&gt;new&lt;/span&gt; &lt;span style="COLOR: blue"&gt;object&lt;/span&gt;();&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;    }&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt; &lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;    &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;Stack&lt;/span&gt; CurrentStack {&lt;span style="COLOR: blue"&gt;get&lt;/span&gt; { &lt;span style="COLOR: blue"&gt;return&lt;/span&gt; (_CurrentStack); }}&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt; &lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;    &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: blue"&gt;void&lt;/span&gt; RegisterScope(&lt;span style="COLOR: #2b91af"&gt;ISessionScope&lt;/span&gt; scope)&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;    {&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;        CurrentStack.Push(scope);&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;    }&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt; &lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt; &lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;    &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;ISessionScope&lt;/span&gt; GetRegisteredScope()&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;    {&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;        &lt;span style="COLOR: blue"&gt;if&lt;/span&gt; (CurrentStack.Count == 0)&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;        {&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;            &lt;span style="COLOR: green"&gt;//Instead of returning a "null" stack as is in the original ActiveRecord code, &lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;            &lt;span style="COLOR: green"&gt;//instantiate a new one which adds itself to the stack immediately&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;            &lt;span style="COLOR: blue"&gt;lock&lt;/span&gt; (_SyncLock)&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;            {&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;                &lt;span style="COLOR: blue"&gt;if&lt;/span&gt; (CurrentStack.Count == 0)&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;                {&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;                    &lt;span style="COLOR: blue"&gt;new&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;SessionScope&lt;/span&gt;();&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;                }&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;            }&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;        }&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;        &lt;span style="COLOR: blue"&gt;return&lt;/span&gt; CurrentStack.Peek() &lt;span style="COLOR: blue"&gt;as&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;ISessionScope&lt;/span&gt;;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;    }&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt; &lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;    &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: blue"&gt;void&lt;/span&gt; UnRegisterScope(&lt;span style="COLOR: #2b91af"&gt;ISessionScope&lt;/span&gt; scope)&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;    {&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;        &lt;span style="COLOR: blue"&gt;if&lt;/span&gt; (GetRegisteredScope() != scope)&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;        {&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;            &lt;span style="COLOR: blue"&gt;throw&lt;/span&gt; &lt;span style="COLOR: blue"&gt;new&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;ScopeMachineryException&lt;/span&gt;(&lt;span style="COLOR: #a31515"&gt;"Tried to unregister a scope that is not the active one"&lt;/span&gt;);&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;        }&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;        CurrentStack.Pop();&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;    }&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt; &lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;    &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: blue"&gt;bool&lt;/span&gt; HasInitializedScope&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;    {&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;        &lt;span style="COLOR: blue"&gt;get&lt;/span&gt; { &lt;span style="COLOR: blue"&gt;return&lt;/span&gt; GetRegisteredScope() != &lt;span style="COLOR: blue"&gt;null&lt;/span&gt;; }&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;    }&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;}&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;&lt;!--EndFragment--&gt;&lt;/p&gt;
&lt;p&gt;The crux of the change is the modification to the GetRegisteredScope() method, which, if in the event of the stack being empty, instantiates a new SessionScope object; This object automatically registers itself, which in turn causes it to be pushed onto the stack.&lt;/p&gt;
&lt;p&gt;This is a hack, and I have no doubt about it. It does, however, cause all issues surrounding lazy loading to dissapear, with no side-efects that I've noticed at all.&lt;/p&gt;&lt;img src="http://www.darkside.co.za/aggbug/51.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Darksider</dc:creator>
            <guid>http://www.darkside.co.za/archive/2008/09/09/castle-activerecord-lazy-loading-session-scopes-again.aspx</guid>
            <pubDate>Tue, 09 Sep 2008 08:11:09 GMT</pubDate>
            <comments>http://www.darkside.co.za/archive/2008/09/09/castle-activerecord-lazy-loading-session-scopes-again.aspx#feedback</comments>
            <wfw:commentRss>http://www.darkside.co.za/comments/commentRss/51.aspx</wfw:commentRss>
            <enclosure url="http://www.darkside.co.za/files/threadscopeinfo.zip" length="941" type="application/octetstream" />
        </item>
    </channel>
</rss>