<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>Initialising Castle ActiveRecord in a WAS-hosted WCF service</title>
            <link>http://www.darkside.co.za/archive/2010/07/16/initialise-castle-activerecord-was-wcf.aspx</link>
            <description>&lt;p&gt;I stumbled upon an interesting problem this morning where Castle ActiveRecord was being initialised correctly in the development environment, but as soon as everything was rolled out to the lab environment, the application would throw errors about AR not being initialised. The error message was along the lines of:&lt;/p&gt;  &lt;p&gt;&lt;font color="#ff0000" face="Courier New"&gt;An ActiveRecord class (Darkside.Domain.Person) was used but the framework seems not properly initialized. Did you forget about ActiveRecordStarter.Initialize() ?&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;A bit of background info: As is custom in our web projects, we use an HttpModule to do the AR initialisation. In this case, the web project is actually a WAS host for our WCF services. After doing a bit of research, I found out that HttpModules are not executed when running WCF services. The reason we had the illusion it was working in dev is because of a default page that was started when the project was run. This caused the HttpModule to run, which in turn initialised AR for that session.&lt;/p&gt;  &lt;p&gt;Our solution to this problem was to make use of a custom service host factory. I’ve touched on the custom service host factory subject &lt;a href="http://www.darkside.co.za/archive/2008/02/21/custom-servicehostfactory-for-wcf-and-iis.aspx" target="_blank"&gt;here&lt;/a&gt; before, and this solution is just another use of it.&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: blue"&gt;class&lt;/span&gt; &lt;span style="color: #2b91af"&gt;CustomServiceHostFactory&lt;/span&gt; : &lt;span style="color: #2b91af"&gt;ServiceHostFactory&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;static&lt;/span&gt; &lt;span style="color: blue"&gt;readonly&lt;/span&gt; &lt;span style="color: blue"&gt;object&lt;/span&gt; m_InitActiveRecordLock = &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;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;override&lt;/span&gt; System.ServiceModel.&lt;span style="color: #2b91af"&gt;ServiceHostBase&lt;/span&gt; CreateServiceHost(&lt;span style="color: blue"&gt;string&lt;/span&gt; constructorString, &lt;span style="color: #2b91af"&gt;Uri&lt;/span&gt;[] baseAddresses)&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;//Initialise ActiveRecord...&lt;/span&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;ActiveRecordStarter&lt;/span&gt;.IsInitialized)&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; (m_InitActiveRecordLock)&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;ActiveRecordStarter&lt;/span&gt;.IsInitialized)&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;.Initialize(&lt;span style="color: #2b91af"&gt;Assembly&lt;/span&gt;.Load(&lt;span style="color: #a31515"&gt;"Darkside.Domain"&lt;/span&gt;), &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;/pre&gt;

  &lt;pre style="margin: 0px"&gt; &lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;        &lt;span style="color: green"&gt;//Hand off the real host creation to the base class..&lt;/span&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;base&lt;/span&gt;.CreateServiceHost(constructorString, baseAddresses));&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;You then need to add the Factory attribute into your .SVC file&lt;/p&gt;

&lt;div class="Code"&gt;
  &lt;pre style="margin: 0px"&gt;&lt;span style="background: yellow"&gt;&amp;lt;%&lt;/span&gt;&lt;span style="color: blue"&gt;@&lt;/span&gt; &lt;span style="color: maroon"&gt;ServiceHost&lt;/span&gt; &lt;span style="color: red"&gt;Language&lt;/span&gt;&lt;span style="color: blue"&gt;="C#"&lt;/span&gt; &lt;span style="color: red"&gt;Debug&lt;/span&gt;&lt;span style="color: blue"&gt;="false"&lt;/span&gt; &lt;span style="color: red"&gt;Service&lt;/span&gt;&lt;span style="color: blue"&gt;="Darkside.Services.CRUDService, Darkside.Services"&lt;/span&gt; &lt;span style="color: red"&gt;Factory&lt;/span&gt;&lt;span style="color: blue"&gt;="Darkside.WAS.CustomServiceHostFactory"&lt;/span&gt; &lt;span style="background: yellow"&gt;%&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Now, if a new service host is created in your app, AR will be initialised first, if needed.&lt;/p&gt;&lt;img src="http://www.darkside.co.za/aggbug/115.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Ryan Schreiber</dc:creator>
            <guid>http://www.darkside.co.za/archive/2010/07/16/initialise-castle-activerecord-was-wcf.aspx</guid>
            <pubDate>Fri, 16 Jul 2010 09:25:53 GMT</pubDate>
            <wfw:comment>http://www.darkside.co.za/comments/115.aspx</wfw:comment>
            <comments>http://www.darkside.co.za/archive/2010/07/16/initialise-castle-activerecord-was-wcf.aspx#feedback</comments>
            <wfw:commentRss>http://www.darkside.co.za/comments/commentRss/115.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Configuring and using the SQLite database in Castle ActiveRecord</title>
            <link>http://www.darkside.co.za/archive/2010/07/07/configuring-using-sqlite-castle-activerecord.aspx</link>
            <description>&lt;p&gt;There are a few solutions out on the web for this – here’s my implementation for you to use (and for me to safe-keep). I use this primarily for testing my ActiveRecord objects, as I haven’t really found any use for this mechanism in any production environment&lt;/p&gt;  &lt;p&gt;Firstly, the configuration. Notice that I specify my own connection provider (make sure you correctly swap out the relevant portions with your own namespaces). Also, there’s a slight twist in the connection string that you may want to take note of. The rest is straight forward.&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;isDebug&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; &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;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;/pre&gt;

  &lt;pre style="margin: 0px"&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;Darkside.ARLibrary.SqLiteConnectionProvider, Darkside.ARLibrary&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.SQLiteDialect&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.SQLite20Driver&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;Data Source=:memory:;Version=3;New=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;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;/pre&gt;

  &lt;pre style="margin: 0px"&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: 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;Next, you’ll need to implement your own connection provider. The reason this needs to be done is because when you close a connection on a SQLite database which you’ve configured to be in-memory, the entire contents (tables and data) is lost.&lt;/p&gt;

&lt;p&gt;You simply inherit from NHibernate.Connection.DriverConnectionProvider and override the GetConnection() and CloseConnection() methods. In your implementation of GetConnection(), you cache an instance of the connection and always return the same one. In CloseConnection(), you do nothing – you don’t need or want to close the connection.&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: blue"&gt;class&lt;/span&gt; &lt;span style="color: #2b91af"&gt;SqLiteConnectionProvider&lt;/span&gt; : NHibernate.Connection.&lt;span style="color: #2b91af"&gt;DriverConnectionProvider&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;static&lt;/span&gt; System.Data.&lt;span style="color: #2b91af"&gt;IDbConnection&lt;/span&gt; m_Connection;&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; System.Data.&lt;span style="color: #2b91af"&gt;IDbConnection&lt;/span&gt; GetConnection()&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; (m_Connection == &lt;span style="color: blue"&gt;null&lt;/span&gt;) &lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;                m_Connection = &lt;span style="color: blue"&gt;base&lt;/span&gt;.GetConnection();&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;            &lt;span style="color: blue"&gt;return&lt;/span&gt; m_Connection;&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;override&lt;/span&gt; &lt;span style="color: blue"&gt;void&lt;/span&gt; CloseConnection(System.Data.&lt;span style="color: #2b91af"&gt;IDbConnection&lt;/span&gt; conn)&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;        {&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;            &lt;span style="color: green"&gt;//Do nothing&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;img src="http://www.darkside.co.za/aggbug/113.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Ryan Schreiber</dc:creator>
            <guid>http://www.darkside.co.za/archive/2010/07/07/configuring-using-sqlite-castle-activerecord.aspx</guid>
            <pubDate>Wed, 07 Jul 2010 17:36:16 GMT</pubDate>
            <wfw:comment>http://www.darkside.co.za/comments/113.aspx</wfw:comment>
            <comments>http://www.darkside.co.za/archive/2010/07/07/configuring-using-sqlite-castle-activerecord.aspx#feedback</comments>
            <wfw:commentRss>http://www.darkside.co.za/comments/commentRss/113.aspx</wfw:commentRss>
        </item>
        <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>
    </channel>
</rss>