<?xml version="1.0"?>
<rss  version="2.0">
  <channel>
    <title>justnbusiness</title>
    <link>http://justnbusiness.com/Default.aspx</link>
    <description>A technical blog about NBusiness and everything else.</description>
    <language>en-us</language>
    <pubDate>Thu, 17 Jul 2008 23:07:53 GMT</pubDate>
    <item>
      <title>ESharp Validation Rule Breakthrough</title>
      <link>http://justnbusiness.com/Blogs/ESharp_Validation_Rule_Breakthrough.aspx</link>
      <description>&lt;p&gt;&amp;nbsp;After a late night of hacking I have finally got an end to end transformation of E# validation rules into CSLA code that compiles. I am using the NVelocity code generator I created to do this, here is the example entity I have defined:&lt;/p&gt;
&lt;table cellspacing="0" cellpadding="0" border="1" style="border: medium none ; border-collapse: collapse;" class="MsoTableGrid"&gt;
    &lt;tbody&gt;
        &lt;tr style=""&gt;
            &lt;td width="638" valign="top" style="border: 1pt solid black; padding: 0in 5.4pt; width: 6.65in;"&gt;
            &lt;p style="margin-bottom: 0.0001pt; line-height: normal;" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: blue;"&gt;using&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt; &lt;span style="color: teal;"&gt;NBusiness&lt;/span&gt;.&lt;span style="color: teal;"&gt;Frameworks&lt;/span&gt;.&lt;span style="color: teal;"&gt;Csla&lt;/span&gt;.&lt;span style="color: teal;"&gt;Templates&lt;/span&gt;;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
            &lt;p style="margin-bottom: 0.0001pt; line-height: normal;" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: blue;"&gt;using&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt; &lt;span style="color: teal;"&gt;Csla&lt;/span&gt;.&lt;span style="color: teal;"&gt;Validation&lt;/span&gt;.&lt;span style="color: teal;"&gt;CommonRules&lt;/span&gt;;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
            &lt;p style="margin-bottom: 0.0001pt; line-height: normal;" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
            &lt;p style="margin-bottom: 0.0001pt; line-height: normal;" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: blue;"&gt;family&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt; Test&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
            &lt;p style="margin-bottom: 0.0001pt; line-height: normal;" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
            &lt;p style="margin-bottom: 0.0001pt; line-height: normal;" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;entity&lt;/span&gt; &lt;span style="color: teal;"&gt;A&lt;/span&gt; &lt;span style="color: purple;"&gt;as&lt;/span&gt; EditableRoot&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
            &lt;p style="margin-bottom: 0.0001pt; line-height: normal;" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
            &lt;p style="margin-bottom: 0.0001pt; line-height: normal;" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;field&lt;/span&gt;   &lt;span style="color: blue;"&gt;auto&lt;/span&gt; &lt;span style="color: blue;"&gt;id&lt;/span&gt; &lt;span style="color: blue;"&gt;int&lt;/span&gt; &lt;span style="color: teal;"&gt;aid&lt;/span&gt;;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
            &lt;p style="margin-bottom: 0.0001pt; line-height: normal;" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;field&lt;/span&gt;   &lt;span style="color: blue;"&gt;nullable&lt;/span&gt; &lt;span style="color: blue;"&gt;string&lt;/span&gt;   &lt;span style="color: teal;"&gt;data&lt;/span&gt;;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
            &lt;p style="margin-bottom: 0.0001pt; line-height: normal;" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;field&lt;/span&gt;   &lt;span style="color: blue;"&gt;nullable&lt;/span&gt; &lt;span style="color: blue;"&gt;double&lt;/span&gt;   &lt;span style="color: teal;"&gt;value&lt;/span&gt;;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
            &lt;p style="margin-bottom: 0.0001pt; line-height: normal;" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
            &lt;p style="margin-bottom: 0.0001pt; line-height: normal;" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;validate&lt;/span&gt;   &lt;span style="color: teal;"&gt;data&lt;/span&gt; StringMaxLength { MaxLength : 10 };&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
            &lt;p style="margin-bottom: 0.0001pt; line-height: normal;" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
            &lt;p style="margin-bottom: 0.0001pt; line-height: normal;" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt;}&lt;/span&gt;&lt;/p&gt;
            &lt;/td&gt;
        &lt;/tr&gt;
    &lt;/tbody&gt;
&lt;/table&gt;
&lt;p class="MsoNormal"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;o:p&gt;&lt;/o:p&gt;After running this through the compiler here is the code that it generated:&lt;/p&gt;
&lt;table cellspacing="0" cellpadding="0" border="1" style="border: medium none ; border-collapse: collapse;" class="MsoTableGrid"&gt;
    &lt;tbody&gt;
        &lt;tr style=""&gt;
            &lt;td width="638" valign="top" style="border: 1pt solid black; padding: 0in 5.4pt; width: 6.65in;"&gt;
            &lt;p style="margin-bottom: 0.0001pt; line-height: normal;" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: blue;"&gt;using&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt; System;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
            &lt;p style="margin-bottom: 0.0001pt; line-height: normal;" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: blue;"&gt;using&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt; Csla;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
            &lt;p style="margin-bottom: 0.0001pt; line-height: normal;" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: blue;"&gt;using&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt; Csla.Validation;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
            &lt;p style="margin-bottom: 0.0001pt; line-height: normal;" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: blue;"&gt;using&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt; System.Collections.Generic;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
            &lt;p style="margin-bottom: 0.0001pt; line-height: normal;" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
            &lt;p style="margin-bottom: 0.0001pt; line-height: normal;" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: blue;"&gt;namespace&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt; Test&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
            &lt;p style="margin-bottom: 0.0001pt; line-height: normal;" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
            &lt;p style="margin-bottom: 0.0001pt; line-height: normal;" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;[&lt;span style="color: rgb(43, 145, 175);"&gt;Serializable&lt;/span&gt;]&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
            &lt;p style="margin-bottom: 0.0001pt; line-height: normal;" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&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: rgb(43, 145, 175);"&gt;A&lt;/span&gt; : &lt;span style="color: rgb(43, 145, 175);"&gt;BusinessBase&lt;/span&gt;&amp;lt;&lt;span style="color: rgb(43, 145, 175);"&gt;A&lt;/span&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
            &lt;p style="margin-bottom: 0.0001pt; line-height: normal;" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
            &lt;p style="margin-bottom: 0.0001pt; line-height: normal;" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: blue;"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;#region&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt; Properties&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
            &lt;p style="margin-bottom: 0.0001pt; line-height: normal;" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&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: rgb(43, 145, 175);"&gt;PropertyInfo&lt;/span&gt;&amp;lt;&lt;span style="color: blue;"&gt;int&lt;/span&gt;&amp;gt; aidProperty = RegisterProperty&amp;lt;&lt;span style="color: blue;"&gt;int&lt;/span&gt;&amp;gt;(&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
            &lt;p style="margin-bottom: 0.0001pt; line-height: normal;" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;typeof&lt;/span&gt;(&lt;span style="color: rgb(43, 145, 175);"&gt;A&lt;/span&gt;), &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
            &lt;p style="margin-bottom: 0.0001pt; line-height: normal;" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;PropertyInfo&lt;/span&gt;&amp;lt;&lt;span style="color: blue;"&gt;int&lt;/span&gt;&amp;gt;(&lt;span style="color: rgb(163, 21, 21);"&gt;&amp;quot;aid&amp;quot;&lt;/span&gt;));&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
            &lt;p style="margin-bottom: 0.0001pt; line-height: normal;" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&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;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
            &lt;p style="margin-bottom: 0.0001pt; line-height: normal;" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; aid property&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
            &lt;p style="margin-bottom: 0.0001pt; line-height: normal;" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&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;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
            &lt;p style="margin-bottom: 0.0001pt; line-height: normal;" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;int&lt;/span&gt; aid&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
            &lt;p style="margin-bottom: 0.0001pt; line-height: normal;" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
            &lt;p style="margin-bottom: 0.0001pt; line-height: normal;" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;get&lt;/span&gt; { &lt;span style="color: blue;"&gt;return&lt;/span&gt; GetProperty&amp;lt;&lt;span style="color: blue;"&gt;int&lt;/span&gt;&amp;gt;(aidProperty); }&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
            &lt;p style="margin-bottom: 0.0001pt; line-height: normal;" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
            &lt;p style="margin-bottom: 0.0001pt; line-height: normal;" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&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: rgb(43, 145, 175);"&gt;PropertyInfo&lt;/span&gt;&amp;lt;&lt;span style="color: blue;"&gt;string&lt;/span&gt;&amp;gt; dataProperty = RegisterProperty&amp;lt;&lt;span style="color: blue;"&gt;string&lt;/span&gt;&amp;gt;(&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
            &lt;p style="margin-bottom: 0.0001pt; line-height: normal;" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;typeof&lt;/span&gt;(&lt;span style="color: rgb(43, 145, 175);"&gt;A&lt;/span&gt;), &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
            &lt;p style="margin-bottom: 0.0001pt; line-height: normal;" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;PropertyInfo&lt;/span&gt;&amp;lt;&lt;span style="color: blue;"&gt;string&lt;/span&gt;&amp;gt;(&lt;span style="color: rgb(163, 21, 21);"&gt;&amp;quot;data&amp;quot;&lt;/span&gt;));&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
            &lt;p style="margin-bottom: 0.0001pt; line-height: normal;" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&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;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
            &lt;p style="margin-bottom: 0.0001pt; line-height: normal;" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; data property&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
            &lt;p style="margin-bottom: 0.0001pt; line-height: normal;" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&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;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
            &lt;p style="margin-bottom: 0.0001pt; line-height: normal;" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;string&lt;/span&gt; data&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
            &lt;p style="margin-bottom: 0.0001pt; line-height: normal;" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
            &lt;p style="margin-bottom: 0.0001pt; line-height: normal;" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;get&lt;/span&gt; { &lt;span style="color: blue;"&gt;return&lt;/span&gt; GetProperty&amp;lt;&lt;span style="color: blue;"&gt;string&lt;/span&gt;&amp;gt;(dataProperty); }&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
            &lt;p style="margin-bottom: 0.0001pt; line-height: normal;" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;set&lt;/span&gt; { SetProperty&amp;lt;&lt;span style="color: blue;"&gt;string&lt;/span&gt;&amp;gt;(dataProperty, &lt;span style="color: blue;"&gt;value&lt;/span&gt;); }&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
            &lt;p style="margin-bottom: 0.0001pt; line-height: normal;" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
            &lt;p style="margin-bottom: 0.0001pt; line-height: normal;" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&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: rgb(43, 145, 175);"&gt;PropertyInfo&lt;/span&gt;&amp;lt;System.&lt;span style="color: rgb(43, 145, 175);"&gt;Nullable&lt;/span&gt;&amp;lt;&lt;span style="color: blue;"&gt;double&lt;/span&gt;&amp;gt;&amp;gt; valueProperty = RegisterProperty&amp;lt;System.&lt;span style="color: rgb(43, 145, 175);"&gt;Nullable&lt;/span&gt;&amp;lt;&lt;span style="color: blue;"&gt;double&lt;/span&gt;&amp;gt;&amp;gt;(&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
            &lt;p style="margin-bottom: 0.0001pt; line-height: normal;" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;typeof&lt;/span&gt;(&lt;span style="color: rgb(43, 145, 175);"&gt;A&lt;/span&gt;), &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
            &lt;p style="margin-bottom: 0.0001pt; line-height: normal;" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;PropertyInfo&lt;/span&gt;&amp;lt;System.&lt;span style="color: rgb(43, 145, 175);"&gt;Nullable&lt;/span&gt;&amp;lt;&lt;span style="color: blue;"&gt;double&lt;/span&gt;&amp;gt;&amp;gt;(&lt;span style="color: rgb(163, 21, 21);"&gt;&amp;quot;value&amp;quot;&lt;/span&gt;));&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
            &lt;p style="margin-bottom: 0.0001pt; line-height: normal;" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&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;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
            &lt;p style="margin-bottom: 0.0001pt; line-height: normal;" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; value property&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
            &lt;p style="margin-bottom: 0.0001pt; line-height: normal;" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&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;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
            &lt;p style="margin-bottom: 0.0001pt; line-height: normal;" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt; System.&lt;span style="color: rgb(43, 145, 175);"&gt;Nullable&lt;/span&gt;&amp;lt;&lt;span style="color: blue;"&gt;double&lt;/span&gt;&amp;gt; value&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
            &lt;p style="margin-bottom: 0.0001pt; line-height: normal;" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
            &lt;p style="margin-bottom: 0.0001pt; line-height: normal;" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;get&lt;/span&gt; { &lt;span style="color: blue;"&gt;return&lt;/span&gt; GetProperty&amp;lt;System.&lt;span style="color: rgb(43, 145, 175);"&gt;Nullable&lt;/span&gt;&amp;lt;&lt;span style="color: blue;"&gt;double&lt;/span&gt;&amp;gt;&amp;gt;(valueProperty); }&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
            &lt;p style="margin-bottom: 0.0001pt; line-height: normal;" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;set&lt;/span&gt; { SetProperty&amp;lt;System.&lt;span style="color: rgb(43, 145, 175);"&gt;Nullable&lt;/span&gt;&amp;lt;&lt;span style="color: blue;"&gt;double&lt;/span&gt;&amp;gt;&amp;gt;(valueProperty, &lt;span style="color: blue;"&gt;value&lt;/span&gt;); }&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
            &lt;p style="margin-bottom: 0.0001pt; line-height: normal;" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
            &lt;p style="margin-bottom: 0.0001pt; line-height: normal;" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: blue;"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;#endregion&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
            &lt;p style="margin-bottom: 0.0001pt; line-height: normal;" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: blue;"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
            &lt;p style="margin-bottom: 0.0001pt; line-height: normal;" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: blue;"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;#region&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt; Relationships&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
            &lt;p style="margin-bottom: 0.0001pt; line-height: normal;" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: blue;"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;#endregion&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
            &lt;p style="margin-bottom: 0.0001pt; line-height: normal;" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
            &lt;p style="margin-bottom: 0.0001pt; line-height: normal;" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: blue;"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;#region&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt; Validation&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
            &lt;p style="margin-bottom: 0.0001pt; line-height: normal;" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&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; AddBusinessRules() &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
            &lt;p style="" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; line-height: 115%; font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
            &lt;p style="margin-bottom: 0.0001pt; line-height: normal;" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: rgb(43, 145, 175);"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Dictionary&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt;&amp;lt;&lt;span style="color: blue;"&gt;string&lt;/span&gt;, &lt;span style="color: blue;"&gt;object&lt;/span&gt;&amp;gt; dataArgs = &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;Dictionary&lt;/span&gt;&amp;lt;&lt;span style="color: blue;"&gt;string&lt;/span&gt;, &lt;span style="color: blue;"&gt;object&lt;/span&gt;&amp;gt;();&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
            &lt;p style="margin-bottom: 0.0001pt; line-height: normal;" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;dataArgs.Add(&lt;span style="color: rgb(163, 21, 21);"&gt;&amp;quot;MaxLength&amp;quot;&lt;/span&gt;, 10);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
            &lt;p style="margin-bottom: 0.0001pt; line-height: normal;" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;ValidationRules.AddRule(&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
            &lt;p style="margin-bottom: 0.0001pt; line-height: normal;" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Csla.Validation.&lt;span style="color: rgb(43, 145, 175);"&gt;CommonRules&lt;/span&gt;.StringMaxLength, &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
            &lt;p style="margin-bottom: 0.0001pt; line-height: normal;" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;DecoratedRuleArgs&lt;/span&gt;(dataProperty, dataArgs));&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
            &lt;p style="margin-bottom: 0.0001pt; line-height: normal;" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
            &lt;p style="margin-bottom: 0.0001pt; line-height: normal;" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: blue;"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;#endregion&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
            &lt;p style="margin-bottom: 0.0001pt; line-height: normal;" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
            &lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt;}&lt;/span&gt;&lt;/td&gt;
        &lt;/tr&gt;
    &lt;/tbody&gt;
&lt;/table&gt;
&lt;p class="MsoNormal"&gt;&lt;o:p&gt;(You can see the power of a DSL simply by looking at how many more lines of code it takes to represent the same thing in a lower level language!)&lt;/o:p&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;It has taken me a &lt;i style=""&gt;loooong&lt;/i&gt; time to get to this point and I think it&amp;rsquo;s all downhill from here. Trying to find out how to discover validation / access / authorization rules from arbitrary business object frameworks turns out to be a terribly difficult thing to do. There is lots of room for improvement but I think I have the basics down for now. This should allow me to generate code for CSLA and NBusiness frameworks at least and perhaps a couple of others without too much work.&lt;/p&gt;
&lt;p class="MsoNormal"&gt;Next up is largely a process of cleaning up code (I have been hacking on things a lot recently), fixing up unit tests and fleshing out CSLA templates for each major stereotype (I love that word in a software context!). What a relief!&lt;/p&gt;</description>
      <guid>http://justnbusiness.com/Blogs/ESharp_Validation_Rule_Breakthrough.aspx</guid>
      <pubDate>Thu, 17 Jul 2008 23:07:53 GMT</pubDate>
    </item>
    <item>
      <title>Unit Testing Asynchronous Code in Silverlight</title>
      <link>http://justnbusiness.com/Blogs/Unit_Testing_Asynchronous_Code_in_Silverlight.aspx</link>
      <description>&lt;p&gt;My current job is a very enjoyable one. I have the pleasure of working for &lt;a href="http://www.lhotka.net/"&gt;Rocky Lhotka&lt;/a&gt; on CSLA 3.6 and CSLA Light, more specifically CSLA Light but the two definitely bleed together.&lt;/p&gt;
&lt;p class="MsoNormal"&gt;CSLA Light is a project where we are trying to create a version of CSLA that will run on Silverlight. If you&amp;rsquo;re interested in hearing more details about this you should check out &lt;a href="http://www.lhotka.net/weblog/SyndicationService.asmx/GetRss"&gt;Rocky&amp;rsquo;s blog&lt;/a&gt; since it is the most up to date authority on CSLA development progress.&lt;/p&gt;
&lt;p class="MsoNormal"&gt;One of the problems we ran into right away was the ability to unit test our Silverlight code. Unit testing on Silverlight presents a number of limitations that are not present in a standard .net application. We initially tried using the unit test framework provided by Microsoft but found it impossible to test anything with a WCF service call in it due to threading.&lt;/p&gt;
&lt;p class="MsoNormal"&gt;To help illustrate the problem consider the following test:&lt;/p&gt;
&lt;table cellspacing="0" cellpadding="0" border="1" style="border: medium none ; border-collapse: collapse;" class="MsoTableGrid"&gt;
    &lt;tbody&gt;
        &lt;tr style=""&gt;
            &lt;td width="638" valign="top" style="border: 1pt solid black; padding: 0in 5.4pt; width: 6.65in;"&gt;
            &lt;p style="margin-bottom: 0.0001pt; line-height: normal;" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt;[&lt;span style="color: rgb(43, 145, 175);"&gt;TestClass&lt;/span&gt;]&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
            &lt;p style="margin-bottom: 0.0001pt; line-height: normal;" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: blue;"&gt;public&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt; &lt;span style="color: blue;"&gt;class&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;TestExample&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
            &lt;p style="margin-bottom: 0.0001pt; line-height: normal;" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
            &lt;p style="margin-bottom: 0.0001pt; line-height: normal;" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;[&lt;span style="color: rgb(43, 145, 175);"&gt;TestMethod&lt;/span&gt;]&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
            &lt;p style="margin-bottom: 0.0001pt; line-height: normal;" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;void&lt;/span&gt; Example()&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
            &lt;p style="margin-bottom: 0.0001pt; line-height: normal;" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
            &lt;p style="margin-bottom: 0.0001pt; line-height: normal;" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;ManualResetEvent&lt;/span&gt;   mre = &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;ManualResetEvent&lt;/span&gt;(&lt;span style="color: blue;"&gt;false&lt;/span&gt;);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
            &lt;p style="margin-bottom: 0.0001pt; line-height: normal;" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;BackgroundWorker&lt;/span&gt;   worker = &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;BackgroundWorker&lt;/span&gt;();&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
            &lt;p style="margin-bottom: 0.0001pt; line-height: normal;" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;worker.DoWork += (o, e) =&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
            &lt;p style="margin-bottom: 0.0001pt; line-height: normal;" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
            &lt;p style="margin-bottom: 0.0001pt; line-height: normal;" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: green;"&gt;// Do some   processing...&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
            &lt;p style="margin-bottom: 0.0001pt; line-height: normal;" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;};&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
            &lt;p style="margin-bottom: 0.0001pt; line-height: normal;" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;worker.RunWorkerCompleted += (o, e)   =&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
            &lt;p style="margin-bottom: 0.0001pt; line-height: normal;" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
            &lt;p style="margin-bottom: 0.0001pt; line-height: normal;" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;mre.Set();&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
            &lt;p style="margin-bottom: 0.0001pt; line-height: normal;" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;};&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
            &lt;p style="margin-bottom: 0.0001pt; line-height: normal;" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;worker.RunWorkerAsync();&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
            &lt;p style="margin-bottom: 0.0001pt; line-height: normal;" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
            &lt;p style="margin-bottom: 0.0001pt; line-height: normal;" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;mre.WaitOne();&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
            &lt;p style="margin-bottom: 0.0001pt; line-height: normal;" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
            &lt;p style="margin-bottom: 0.0001pt; line-height: normal;" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt;}&lt;/span&gt;&lt;/p&gt;
            &lt;/td&gt;
        &lt;/tr&gt;
    &lt;/tbody&gt;
&lt;/table&gt;
&lt;p class="MsoNormal"&gt;This test simulates a unit of work that is performed asynchronously. If you run this test in Silverlight what will happen? Also, suppose in your DoWork method there is bug and an Exception is thrown, what will happen? I&amp;rsquo;ll get back to this in a moment.&lt;/p&gt;
&lt;p class="MsoNormal"&gt;One of the features of CSLA is something called the &amp;ldquo;Data Portal&amp;rdquo; which is a concept that has been preserved in CSLA Light with only some slight differences, primarily all network calls in Silverlight must be done asynchronously. The Data Portal is the mechanism your CSLA business objects must use to transfer data across network separated application tiers. In CSLA 3.6 an asynchronous Data Portal has been created to provide parity with Silverlight, not to mention the fact that it&amp;rsquo;s just plain cool.&lt;/p&gt;
&lt;p class="MsoNormal"&gt;One interesting thing to know about Silverlight is that whenever you use WCF to make a network call it will dispatch that call onto the UI thread. I believe this is actually a limition of the browser rather than Silverlight itself, it must be piggy backing on top of the browser XmlHttpRequest functionality and therefore suffers from the same limitations.&lt;/p&gt;
&lt;p class="MsoNormal"&gt;This is a major problem for the Silverlight MSTest framework! Since your test is running on the UI thread if your test tries to make a WCF call it will need to be dispatched to the UI to work and you will end up with a deadlock. The above test will not work in Silverlight because we have used a ManualResetEvent to hold the UI thread since it too will dispatch to the UI thread.&lt;/p&gt;
&lt;p class="MsoNormal"&gt;So to respond to this we came up with a light weight unit testing framework that will allow you to easily test asynchronous code in Silverlight and to accompany NUnit or MSTest in .NET. The project is on Codeplex and it is called &lt;a href="http://www.codeplex.com/UnitDriven"&gt;Unit Driven&lt;/a&gt;. It is designed to allow you to easily test asynchronous code in both Silverlight and .NET. In fact, in CSLA the test code we are writing is identical for both CSLA and CSLA Light despite the various differences in the environments. Here is an example of how you would write the previous test to address all of the questions I posed using Unit Driven:&lt;/p&gt;
&lt;table cellspacing="0" cellpadding="0" border="1" style="border: medium none ; border-collapse: collapse;" class="MsoTableGrid"&gt;
    &lt;tbody&gt;
        &lt;tr style=""&gt;
            &lt;td width="638" valign="top" style="border: 1pt solid black; padding: 0in 5.4pt; width: 6.65in;"&gt;
            &lt;p style="margin-bottom: 0.0001pt; line-height: normal;" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt;[&lt;span style="color: rgb(43, 145, 175);"&gt;TestClass&lt;/span&gt;]&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
            &lt;p style="margin-bottom: 0.0001pt; line-height: normal;" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: blue;"&gt;public&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt; &lt;span style="color: blue;"&gt;class&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;TestExample&lt;/span&gt; : &lt;span style="color: rgb(43, 145, 175);"&gt;TestBase&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
            &lt;p style="margin-bottom: 0.0001pt; line-height: normal;" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
            &lt;p style="margin-bottom: 0.0001pt; line-height: normal;" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;[&lt;span style="color: rgb(43, 145, 175);"&gt;TestMethod&lt;/span&gt;]&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
            &lt;p style="margin-bottom: 0.0001pt; line-height: normal;" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;void&lt;/span&gt; Example()&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
            &lt;p style="margin-bottom: 0.0001pt; line-height: normal;" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
            &lt;p style="margin-bottom: 0.0001pt; line-height: normal;" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;UnitTestContext&lt;/span&gt;   context = GetContext();&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
            &lt;p style="margin-bottom: 0.0001pt; line-height: normal;" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;BackgroundWorker&lt;/span&gt;   worker = &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;BackgroundWorker&lt;/span&gt;();&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
            &lt;p style="margin-bottom: 0.0001pt; line-height: normal;" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;worker.DoWork += (o, e) =&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
            &lt;p style="margin-bottom: 0.0001pt; line-height: normal;" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
            &lt;p style="margin-bottom: 0.0001pt; line-height: normal;" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;span style=""&gt;&amp;nbsp; &lt;/span&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: green;"&gt;// Do   some processing...&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
            &lt;p style="margin-bottom: 0.0001pt; line-height: normal;" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;};&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
            &lt;p style="margin-bottom: 0.0001pt; line-height: normal;" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;worker.RunWorkerCompleted += (o, e)   =&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
            &lt;p style="margin-bottom: 0.0001pt; line-height: normal;" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
            &lt;p style="margin-bottom: 0.0001pt; line-height: normal;" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;};&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
            &lt;p style="margin-bottom: 0.0001pt; line-height: normal;" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;worker.RunWorkerAsync();&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
            &lt;p style="margin-bottom: 0.0001pt; line-height: normal;" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
            &lt;p style="margin-bottom: 0.0001pt; line-height: normal;" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;context.Complete();&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
            &lt;p style="margin-bottom: 0.0001pt; line-height: normal;" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
            &lt;p style="margin-bottom: 0.0001pt; line-height: normal;" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt;}&lt;/span&gt;&lt;/p&gt;
            &lt;/td&gt;
        &lt;/tr&gt;
    &lt;/tbody&gt;
&lt;/table&gt;
&lt;p class="MsoNormal"&gt;The subtle differences in this approach are simply that you&amp;rsquo;re using the UnitTestContext object to block the thread, or not, for you depending on the framework your test is running in as well as having an AsyncAsserter to manage getting exceptions back to the test thread for you.&lt;/p&gt;
&lt;p class="MsoNormal"&gt;In the first example you would end up in a deadlock in Silverlight and if your DoWork method threw an exception in either framework it would be interpreted as an unhandled exception and would cause your test to hang. With UnitDriven we are able to manage this easily by using an Assert.Try( &amp;hellip; )&lt;/p&gt;
&lt;table cellspacing="0" cellpadding="0" border="1" style="border: medium none ; border-collapse: collapse;" class="MsoTableGrid"&gt;
    &lt;tbody&gt;
        &lt;tr style=""&gt;
            &lt;td width="638" valign="top" style="border: 1pt solid black; padding: 0in 5.4pt; width: 6.65in;"&gt;
            &lt;p style="margin-bottom: 0.0001pt; line-height: normal;" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt;[&lt;span style="color: rgb(43, 145, 175);"&gt;TestMethod&lt;/span&gt;]&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
            &lt;p style="margin-bottom: 0.0001pt; line-height: normal;" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt;[&lt;span style="color: rgb(43, 145, 175);"&gt;ExpectedException&lt;/span&gt;(&lt;span style="color: blue;"&gt;typeof&lt;/span&gt;(&lt;span style="color: rgb(43, 145, 175);"&gt;InvalidOperationException&lt;/span&gt;))]&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
            &lt;p style="margin-bottom: 0.0001pt; line-height: normal;" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: blue;"&gt;public&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt; &lt;span style="color: blue;"&gt;void&lt;/span&gt;   ExpectedExceptionExample()&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
            &lt;p style="margin-bottom: 0.0001pt; line-height: normal;" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
            &lt;p style="margin-bottom: 0.0001pt; line-height: normal;" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;UnitTestContext&lt;/span&gt;   context = GetContext();&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
            &lt;p style="margin-bottom: 0.0001pt; line-height: normal;" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;BackgroundWorker&lt;/span&gt;   worker = &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;BackgroundWorker&lt;/span&gt;();&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
            &lt;p style="margin-bottom: 0.0001pt; line-height: normal;" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;worker.RunWorkerCompleted += (o, e) =&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
            &lt;p style="margin-bottom: 0.0001pt; line-height: normal;" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
            &lt;p style="margin-bottom: 0.0001pt; line-height: normal;" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: green;"&gt;// catches   exception here and passes to the context.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
            &lt;p style="margin-bottom: 0.0001pt; line-height: normal;" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;context.Assert.Try(() =&amp;gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
            &lt;p style="margin-bottom: 0.0001pt; line-height: normal;" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style=""&gt;&amp;nbsp;&lt;/span&gt;{ &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
            &lt;p style="margin-bottom: 0.0001pt; line-height: normal;" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&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: rgb(43, 145, 175);"&gt;InvalidOperationException&lt;/span&gt;();   &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
            &lt;p style="margin-bottom: 0.0001pt; line-height: normal;" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style=""&gt;&amp;nbsp;&lt;/span&gt;});&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
            &lt;p style="margin-bottom: 0.0001pt; line-height: normal;" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;context.Assert.Fail();&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
            &lt;p style="margin-bottom: 0.0001pt; line-height: normal;" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;};&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
            &lt;p style="margin-bottom: 0.0001pt; line-height: normal;" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;worker.RunWorkerAsync();&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
            &lt;p style="margin-bottom: 0.0001pt; line-height: normal;" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
            &lt;p style="margin-bottom: 0.0001pt; line-height: normal;" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: green;"&gt;// When the   context is triggered it will find the &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
            &lt;p style="margin-bottom: 0.0001pt; line-height: normal;" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: green;"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;// exception and re-throw it   in .NET&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
            &lt;p style="margin-bottom: 0.0001pt; line-height: normal;" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: green;"&gt;// and simply   pass it back in Silverlight.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
            &lt;p style="margin-bottom: 0.0001pt; line-height: normal;" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;context.Complete();&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
            &lt;p style="margin-bottom: 0.0001pt; line-height: normal;" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt;}&lt;/span&gt;&lt;/p&gt;
            &lt;/td&gt;
        &lt;/tr&gt;
    &lt;/tbody&gt;
&lt;/table&gt;
&lt;p class="MsoNormal"&gt;&lt;o:p&gt;For some working examples check out our &lt;a href="http://www.codeplex.com/UnitDriven/SourceControl/FileView.aspx?itemId=240788&amp;amp;changeSetId=20013"&gt;AsyncTests.cs&lt;/a&gt; on codeplex.&lt;br /&gt;
&lt;/o:p&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;Happy Testing!&lt;/p&gt;</description>
      <guid>http://justnbusiness.com/Blogs/Unit_Testing_Asynchronous_Code_in_Silverlight.aspx</guid>
      <pubDate>Wed, 16 Jul 2008 12:02:58 GMT</pubDate>
    </item>
    <item>
      <title>NVelocity Code Generation Tool for NBusiness</title>
      <link>http://justnbusiness.com/Blogs/NVelocity_Code_Generation_Tool_for_NBusiness.aspx</link>
      <description>&lt;p&gt;I&amp;rsquo;ve really been struggling with how to improve creating templates for NBusiness 3 so that it is much easier than it is now. I have been delayed by the prospect of actually creating any more templates with the CodeDom. It is just too painful and ugly.&lt;/p&gt;
&lt;div style="margin: 0in 0in 10pt"&gt;On one hand I &lt;i&gt;really&lt;/i&gt; want templates to be classes because this allows me to search for them easily, they are either in the same assembly or in a referenced assembly. It also allows me to easily gather meta-data about templates (attributes) and actually run the templates. It also allows for the template developer to generate code however they way, it's very powerful. There also does not need to be some special path that you store templates in and there does not need to be a relative path specified in the entity. It&amp;rsquo;s a very light-weight and powerful way to do templates.&lt;/div&gt;
&lt;div style="margin: 0in 0in 10pt"&gt;Unfortunately the problem with this approach is that your templates are probably going to end up being done with the CodeDom, which as you probably know is a royal pain in the butt. If you try to use a template engine such as NVelocity then you&amp;rsquo;re stuck taking care of the path issues yourself, which is ok but is also sort of annoying.&lt;/div&gt;
&lt;div style="margin: 0in 0in 10pt"&gt;Well last night I finally figured out a great solution to this problem. I have decided to include an NBusinessTemplateCodeGenerator Custom Tool to the visual studio integration project. This custom tool will generate for you a template class, based on a template file it is applied to in your solution. Then your entities can reference that template and will use NVelocity to do the generation. I plan on making it extensible somehow so other template tools (such as codesmith?) could be used. Here are some screenshots of a working prototype.&lt;/div&gt;
&lt;div style="margin: 0in 0in 10pt"&gt;&lt;a href="http://www.justnbusiness.com/uploads/Images/template-codegeneration-s1.png"&gt;&lt;img alt="" src="http://www.justnbusiness.com/uploads/Images/template-codegeneration-s1.thumb.png" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style="margin: 0in 0in 10pt"&gt;So in this example my simple NVelocity template has the following code:&lt;/div&gt;
&lt;p&gt;
&lt;table style="border-right: medium none; border-top: medium none; border-left: medium none; border-bottom: medium none; border-collapse: collapse" border="1" cellspacing="0" cellpadding="0"&gt;
    &lt;tbody&gt;
        &lt;tr&gt;
            &lt;td style="border-right: black 1pt solid; padding-right: 5.4pt; padding-left: 5.4pt; border-top: black 1pt solid; padding-bottom: 0in; border-left: black 1pt solid; width: 6.65in; padding-top: 0in; border-bottom: black 1pt solid; background-color: transparent" valign="top" width="638"&gt;
            &lt;div style="margin: 0in 0in 0pt; line-height: normal"&gt;&lt;span style="font-size: 10pt"&gt;using System;&lt;/span&gt;&lt;/div&gt;
            &lt;div style="margin: 0in 0in 0pt; line-height: normal"&gt;&amp;nbsp;&lt;/div&gt;
            &lt;div style="margin: 0in 0in 0pt; line-height: normal"&gt;&lt;span style="font-size: 10pt"&gt;namespace $entity.Namespace&lt;/span&gt;&lt;/div&gt;
            &lt;div style="margin: 0in 0in 0pt; line-height: normal"&gt;&lt;span style="font-size: 10pt"&gt;{&lt;/span&gt;&lt;/div&gt;
            &lt;div style="margin: 0in 0in 0pt; line-height: normal"&gt;&lt;span style="font-size: 10pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public partial class $entity.Name&lt;/span&gt;&lt;/div&gt;
            &lt;div style="margin: 0in 0in 0pt; line-height: normal"&gt;&lt;span style="font-size: 10pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;/div&gt;
            &lt;div style="margin: 0in 0in 0pt; line-height: normal"&gt;&lt;span style="font-size: 10pt"&gt;#foreach($field in $entity.Fields)&lt;/span&gt;&lt;/div&gt;
            &lt;div style="margin: 0in 0in 0pt; line-height: normal"&gt;&lt;span style="font-size: 10pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public $field.TypeName $field.Name { get; set; }&lt;/span&gt;&lt;/div&gt;
            &lt;div style="margin: 0in 0in 0pt; line-height: normal"&gt;&lt;span style="font-size: 10pt"&gt;#end&lt;/span&gt;&lt;/div&gt;
            &lt;div style="margin: 0in 0in 0pt; line-height: normal"&gt;&lt;span style="font-size: 10pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/div&gt;
            &lt;div style="margin: 0in 0in 0pt; line-height: normal"&gt;&lt;span style="font-size: 10pt"&gt;}&lt;/span&gt;&lt;/div&gt;
            &lt;/td&gt;
        &lt;/tr&gt;
    &lt;/tbody&gt;
&lt;/table&gt;
&lt;/p&gt;
&lt;div style="margin: 0in 0in 10pt"&gt;The .nbt (NBusiness Template) file will create a Template class such as this:&lt;/div&gt;
&lt;p&gt;
&lt;table style="border-right: medium none; border-top: medium none; border-left: medium none; border-bottom: medium none; border-collapse: collapse" border="1" cellspacing="0" cellpadding="0"&gt;
    &lt;tbody&gt;
        &lt;tr&gt;
            &lt;td style="border-right: black 1pt solid; padding-right: 5.4pt; padding-left: 5.4pt; border-top: black 1pt solid; padding-bottom: 0in; border-left: black 1pt solid; width: 6.65in; padding-top: 0in; border-bottom: black 1pt solid; background-color: transparent" valign="top" width="638"&gt;
            &lt;div style="margin: 0in 0in 0pt; line-height: normal"&gt;&lt;span style="font-size: 10pt"&gt;[NBusiness.Templates.&lt;span style="color: #2b91af"&gt;CodeTemplateAttribute&lt;/span&gt;()]&lt;/span&gt;&lt;/div&gt;
            &lt;div style="margin: 0in 0in 0pt; line-height: normal"&gt;&lt;span style="font-size: 10pt; color: blue"&gt;public&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: blue"&gt;class&lt;/span&gt; &lt;span style="color: #2b91af"&gt;TestTemplate&lt;/span&gt; : NBusiness.Templates.&lt;span style="color: #2b91af"&gt;TemplateBase&lt;/span&gt; {&lt;/span&gt;&lt;/div&gt;
            &lt;div style="margin: 0in 0in 0pt; line-height: normal"&gt;&lt;span style="font-size: 10pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;protected&lt;/span&gt; &lt;span style="color: blue"&gt;override&lt;/span&gt; NBusiness.CodeDom.Compiler.&lt;span style="color: #2b91af"&gt;EntityFile&lt;/span&gt; Compile(NBusiness.CodeDom.&lt;span style="color: #2b91af"&gt;Entity&lt;/span&gt; entity, NBusiness.CodeDom.Compiler.&lt;span style="color: #2b91af"&gt;EntityCompileParameters&lt;/span&gt; parameters) {&lt;/span&gt;&lt;/div&gt;
            &lt;div style="margin: 0in 0in 0pt; line-height: normal"&gt;&lt;span style="font-size: 10pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; NBusiness.Templates.&lt;span style="color: #2b91af"&gt;ICodeGeneratorEngine&lt;/span&gt; engine = NBusiness.Templates.&lt;span style="color: #2b91af"&gt;CodeGeneratorEngine&lt;/span&gt;.GetEngine();&lt;/span&gt;&lt;/div&gt;
            &lt;div style="margin: 0in 0in 0pt; line-height: normal"&gt;&lt;span style="font-size: 10pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;string&lt;/span&gt; template = System.Text.&lt;span style="color: #2b91af"&gt;Encoding&lt;/span&gt;.UTF8.GetString(System.&lt;span style="color: #2b91af"&gt;Convert&lt;/span&gt;.FromBase64String(&lt;span style="color: #a31515"&gt;@&amp;quot;IyoNCiAgICBTaW1wbGUgRW50aXR5SW5mbyBDb...you get the idea&amp;quot;&lt;/span&gt;));&lt;/span&gt;&lt;/div&gt;
            &lt;div style="margin: 0in 0in 0pt; line-height: normal"&gt;&lt;span style="font-size: 10pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;byte&lt;/span&gt;[] generated = engine.Generate(entity, template, parameters);&lt;/span&gt;&lt;/div&gt;
            &lt;div style="margin: 0in 0in 0pt; line-height: normal"&gt;&lt;span style="font-size: 10pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue"&gt;return&lt;/span&gt; &lt;span style="color: blue"&gt;new&lt;/span&gt; NBusiness.CodeDom.Compiler.&lt;span style="color: #2b91af"&gt;EntityFile&lt;/span&gt;(entity.Name, generated);&lt;/span&gt;&lt;/div&gt;
            &lt;div style="margin: 0in 0in 0pt; line-height: normal"&gt;&lt;span style="font-size: 10pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/div&gt;
            &lt;div style="margin: 0in 0in 0pt; line-height: normal"&gt;&lt;span style="font-size: 10pt"&gt;}&lt;/span&gt;&lt;/div&gt;
            &lt;/td&gt;
        &lt;/tr&gt;
    &lt;/tbody&gt;
&lt;/table&gt;
&lt;/p&gt;
&lt;div style="margin: 0in 0in 10pt"&gt;&amp;nbsp;&amp;hellip;Which is ugly, which is why this tool was created. It will convert your template code into a base64 string which will be converted back into code before getting passed into the NVelocity engine and merged with the incoming entity. This class will now be accessible by entities in the same project or referencing projects.&lt;/div&gt;
&lt;div style="margin: 0in 0in 10pt"&gt;Your entity file might look like this:&lt;/div&gt;
&lt;p&gt;
&lt;table style="border-right: medium none; border-top: medium none; border-left: medium none; border-bottom: medium none; border-collapse: collapse" border="1" cellspacing="0" cellpadding="0"&gt;
    &lt;tbody&gt;
        &lt;tr&gt;
            &lt;td style="border-right: black 1pt solid; padding-right: 5.4pt; padding-left: 5.4pt; border-top: black 1pt solid; padding-bottom: 0in; border-left: black 1pt solid; width: 6.65in; padding-top: 0in; border-bottom: black 1pt solid; background-color: transparent" valign="top" width="638"&gt;
            &lt;div style="margin: 0in 0in 0pt; line-height: normal"&gt;&lt;span style="font-size: 10pt; color: blue"&gt;using&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: teal"&gt;ClassLibrary1&lt;/span&gt;;&lt;/span&gt;&lt;/div&gt;
            &lt;div style="margin: 0in 0in 0pt; line-height: normal"&gt;&amp;nbsp;&lt;/div&gt;
            &lt;div style="margin: 0in 0in 0pt; line-height: normal"&gt;&lt;span style="font-size: 10pt; color: blue"&gt;family&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; Test&lt;/span&gt;&lt;/div&gt;
            &lt;div style="margin: 0in 0in 0pt; line-height: normal"&gt;&lt;span style="font-size: 10pt"&gt;{&lt;/span&gt;&lt;/div&gt;
            &lt;div style="margin: 0in 0in 0pt; line-height: normal"&gt;&lt;span style="font-size: 10pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;entity&lt;/span&gt; &lt;span style="color: teal"&gt;A&lt;/span&gt; &lt;span style="color: purple"&gt;as&lt;/span&gt; TestTemplate&lt;/span&gt;&lt;/div&gt;
            &lt;div style="margin: 0in 0in 0pt; line-height: normal"&gt;&lt;span style="font-size: 10pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;/div&gt;
            &lt;div style="margin: 0in 0in 0pt; line-height: normal"&gt;&lt;span style="font-size: 10pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;field&lt;/span&gt; &lt;span style="color: blue"&gt;auto&lt;/span&gt; &lt;span style="color: blue"&gt;id&lt;/span&gt; &lt;span style="color: blue"&gt;int&lt;/span&gt; &lt;span style="color: teal"&gt;aid&lt;/span&gt;;&lt;/span&gt;&lt;/div&gt;
            &lt;div style="margin: 0in 0in 0pt; line-height: normal"&gt;&lt;span style="font-size: 10pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;field&lt;/span&gt; &lt;span style="color: blue"&gt;nullable&lt;/span&gt; &lt;span style="color: blue"&gt;string&lt;/span&gt; &lt;span style="color: teal"&gt;data&lt;/span&gt;;&lt;/span&gt;&lt;/div&gt;
            &lt;div style="margin: 0in 0in 0pt; line-height: normal"&gt;&lt;span style="font-size: 10pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;field&lt;/span&gt; &lt;span style="color: blue"&gt;nullable&lt;/span&gt; &lt;span style="color: blue"&gt;double&lt;/span&gt; &lt;span style="color: teal"&gt;value&lt;/span&gt;;&lt;/span&gt;&lt;/div&gt;
            &lt;div style="margin: 0in 0in 0pt; line-height: normal"&gt;&lt;span style="font-size: 10pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/div&gt;
            &lt;div style="margin: 0in 0in 0pt; line-height: normal"&gt;&lt;span style="font-size: 10pt"&gt;}&lt;/span&gt;&lt;/div&gt;
            &lt;/td&gt;
        &lt;/tr&gt;
    &lt;/tbody&gt;
&lt;/table&gt;
&lt;/p&gt;
&lt;div style="margin: 0in 0in 10pt"&gt;Which when run through the TestTemplate will produce code that looks like this:&lt;/div&gt;
&lt;p&gt;
&lt;table style="border-right: medium none; border-top: medium none; border-left: medium none; border-bottom: medium none; border-collapse: collapse" border="1" cellspacing="0" cellpadding="0"&gt;
    &lt;tbody&gt;
        &lt;tr&gt;
            &lt;td style="border-right: black 1pt solid; padding-right: 5.4pt; padding-left: 5.4pt; border-top: black 1pt solid; padding-bottom: 0in; border-left: black 1pt solid; width: 6.65in; padding-top: 0in; border-bottom: black 1pt solid; background-color: transparent" valign="top" width="638"&gt;
            &lt;div style="margin: 0in 0in 0pt; line-height: normal"&gt;&lt;span style="font-size: 10pt; color: blue"&gt;using&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; System;&lt;/span&gt;&lt;/div&gt;
            &lt;div style="margin: 0in 0in 0pt; line-height: normal"&gt;&amp;nbsp;&lt;/div&gt;
            &lt;div style="margin: 0in 0in 0pt; line-height: normal"&gt;&lt;span style="font-size: 10pt; color: blue"&gt;namespace&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; Test&lt;/span&gt;&lt;/div&gt;
            &lt;div style="margin: 0in 0in 0pt; line-height: normal"&gt;&lt;span style="font-size: 10pt"&gt;{&lt;/span&gt;&lt;/div&gt;
            &lt;div style="margin: 0in 0in 0pt; line-height: normal"&gt;&lt;span style="font-size: 10pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &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;A&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
            &lt;div style="margin: 0in 0in 0pt; line-height: normal"&gt;&lt;span style="font-size: 10pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;/div&gt;
            &lt;div style="margin: 0in 0in 0pt; line-height: normal"&gt;&lt;span style="font-size: 10pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;int&lt;/span&gt; aid { &lt;span style="color: blue"&gt;get&lt;/span&gt;; &lt;span style="color: blue"&gt;set&lt;/span&gt;; }&lt;/span&gt;&lt;/div&gt;
            &lt;div style="margin: 0in 0in 0pt; line-height: normal"&gt;&lt;span style="font-size: 10pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;public&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;/span&gt;&lt;/div&gt;
            &lt;div style="margin: 0in 0in 0pt; line-height: normal"&gt;&lt;span style="font-size: 10pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;public&lt;/span&gt; System.&lt;span style="color: #2b91af"&gt;Nullable&lt;/span&gt;&amp;lt;&lt;span style="color: blue"&gt;double&lt;/span&gt;&amp;gt; value { &lt;span style="color: blue"&gt;get&lt;/span&gt;; &lt;span style="color: blue"&gt;set&lt;/span&gt;; }&lt;/span&gt;&lt;/div&gt;
            &lt;div style="margin: 0in 0in 0pt; line-height: normal"&gt;&lt;span style="font-size: 10pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/div&gt;
            &lt;div style="margin: 0in 0in 0pt; line-height: normal"&gt;&lt;span style="font-size: 10pt"&gt;}&lt;/span&gt;&lt;/div&gt;
            &lt;/td&gt;
        &lt;/tr&gt;
    &lt;/tbody&gt;
&lt;/table&gt;
&lt;/p&gt;
&lt;div style="margin: 0in 0in 10pt"&gt;So all you have to do to get NVelocity working with NBusiness entities and models will be to add a .nbt file to your project which (if done through the Add New Item dialog) will have the Custom Tool NBusinessTemplateCodeGenerator applied to it. Then author away!&lt;/div&gt;
&lt;div style="margin: 0in 0in 10pt"&gt;I will be using this system to author the core templates that come with NBusiness from now on.&lt;/div&gt;</description>
      <guid>http://justnbusiness.com/Blogs/NVelocity_Code_Generation_Tool_for_NBusiness.aspx</guid>
      <pubDate>Thu, 03 Jul 2008 08:06:13 GMT</pubDate>
    </item>
    <item>
      <title>Twin Cities Developer Guild</title>
      <link>http://justnbusiness.com/Blogs/Twin_Cities_Developer_Guild.aspx</link>
      <description>&lt;p&gt;The &lt;a href="http://www.twincitiesdevelopersguild.com/"&gt;twin cities developers guild&lt;/a&gt; has recently formed as a way to help bring together and organize other special interest groups.&lt;/p&gt;
&lt;p&gt;Magenic is currently sponsoring an &lt;a href="http://www.twincitiesxnausergroup.com"&gt;XNA User Group&lt;/a&gt; as well as a &lt;a href="http://www.twincitieslanguagesusergroup.com"&gt;Languages User Group &lt;/a&gt;and now the Developers Guild is being formed. I'm happy to say that these groups are open for everyone and will encompass any relevant topic. Check out the respecitve websites and come to the meetings when you can!&lt;/p&gt;</description>
      <guid>http://justnbusiness.com/Blogs/Twin_Cities_Developer_Guild.aspx</guid>
      <pubDate>Mon, 30 Jun 2008 10:12:43 GMT</pubDate>
    </item>
    <item>
      <title>Twin Cities Languages User Group</title>
      <link>http://justnbusiness.com/Blogs/Twin_Cities_Languages_User_Group.aspx</link>
      <description>&lt;p&gt;A new user group has formed in the Twin Cities with a special focus on programming languages.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.twincitieslanguagesusergroup.com"&gt;http://www.twincitieslanguagesusergroup.com&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The first session will be held by Charles Nutter, who works for Sun Microsystems developing JRuby. He works right here in the Twin Cities and I've met him personally at the Lang.NET symposium this past January and found him to be very knowledgable and exciting to talk to.&lt;/p&gt;
&lt;p&gt;Getting a chance to talk with someone who is actively working on a professional programming language should be quite interesting. If you have any interest at all in programming languages you should definitely go to the link above and find out the logistics.&lt;/p&gt;</description>
      <guid>http://justnbusiness.com/Blogs/Twin_Cities_Languages_User_Group.aspx</guid>
      <pubDate>Tue, 24 Jun 2008 08:11:05 GMT</pubDate>
    </item>
    <item>
      <title>NBusiness 3 Updates</title>
      <link>http://justnbusiness.com/Blogs/NBusiness_3_Updates.aspx</link>
      <description>&lt;p&gt;I&amp;rsquo;ve been working on NBusiness a little bit over the weekend. I&amp;rsquo;ve decided to create a Curried API using extension methods for the CodeDom to speed along template creation. Here is an example of what I have so far.&lt;/p&gt;
&lt;p&gt;
&lt;table style="border-right: medium none; border-top: medium none; border-left: medium none; border-bottom: medium none; border-collapse: collapse" border="1" cellspacing="0" cellpadding="0"&gt;
    &lt;tbody&gt;
        &lt;tr&gt;
            &lt;td style="border-right: black 1pt solid; padding-right: 5.4pt; padding-left: 5.4pt; border-top: black 1pt solid; padding-bottom: 0in; border-left: black 1pt solid; width: 6.65in; padding-top: 0in; border-bottom: black 1pt solid; background-color: transparent" valign="top" width="638"&gt;
            &lt;div style="margin: 0in 0in 0pt; line-height: normal"&gt;&lt;span style="font-size: 10pt; color: #2b91af"&gt;CodeMethodReferenceExpression&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; onPropertyChanged = &lt;/span&gt;&lt;/div&gt;
            &lt;div style="margin: 0in 0in 0pt; line-height: normal"&gt;&lt;span style="font-size: 10pt"&gt;&amp;nbsp;&lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;CodeMethodReferenceExpression&lt;/span&gt;(&lt;span style="color: blue"&gt;null&lt;/span&gt;, &lt;span style="color: #a31515"&gt;&amp;quot;OnPropertyChanged&amp;quot;&lt;/span&gt;);&lt;/span&gt;&lt;/div&gt;
            &lt;div style="margin: 0in 0in 0pt; line-height: normal"&gt;&amp;nbsp;&lt;/div&gt;
            &lt;div style="margin: 0in 0in 0pt; line-height: normal"&gt;&lt;span style="font-size: 10pt; color: #2b91af"&gt;CodeMemberProperty&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; memberProperty = &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;CodeMemberProperty&lt;/span&gt;();&lt;/span&gt;&lt;/div&gt;
            &lt;div style="margin: 0in 0in 0pt; line-height: normal"&gt;&lt;span style="font-size: 10pt"&gt;memberProperty.Name = field.Name.ToPascalCase();&lt;/span&gt;&lt;/div&gt;
            &lt;div style="margin: 0in 0in 0pt; line-height: normal"&gt;&lt;span style="font-size: 10pt"&gt;memberProperty.Type = &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;CodeTypeReference&lt;/span&gt;(field.Type);&lt;/span&gt;&lt;/div&gt;
            &lt;div style="margin: 0in 0in 0pt; line-height: normal"&gt;&amp;nbsp;&lt;/div&gt;
            &lt;div style="margin: 0in 0in 0pt; line-height: normal"&gt;&lt;span style="font-size: 10pt"&gt;memberProperty.Get()&lt;/span&gt;&lt;/div&gt;
            &lt;div style="margin: 0in 0in 0pt; line-height: normal"&gt;&lt;span style="font-size: 10pt"&gt;&amp;nbsp;.Return(memberField.Reference());&lt;/span&gt;&lt;/div&gt;
            &lt;div style="margin: 0in 0in 0pt; line-height: normal"&gt;&lt;span style="font-size: 10pt"&gt;memberProperty.Set()&lt;/span&gt;&lt;/div&gt;
            &lt;div style="margin: 0in 0in 0pt; line-height: normal"&gt;&lt;span style="font-size: 10pt"&gt;&amp;nbsp;.If(&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/div&gt;
            &lt;div style="margin: 0in 0in 0pt; line-height: normal"&gt;&lt;span style="font-size: 10pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; memberField.Reference().NotEqualTo(memberProperty.SetValue()))&lt;/span&gt;&lt;/div&gt;
            &lt;div style="margin: 0in 0in 0pt; line-height: normal"&gt;&lt;span style="font-size: 10pt"&gt;&amp;nbsp;.Then(&lt;/span&gt;&lt;/div&gt;
            &lt;div style="margin: 0in 0in 0pt; line-height: normal"&gt;&lt;span style="font-size: 10pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;memberField.Reference().Assign(&lt;/span&gt;&lt;/div&gt;
            &lt;div style="margin: 0in 0in 0pt; line-height: normal"&gt;&lt;span style="font-size: 10pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;memberProperty.SetValue()), &lt;/span&gt;&lt;/div&gt;
            &lt;div style="margin: 0in 0in 0pt; line-height: normal"&gt;&lt;span style="font-size: 10pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; onPropertyChanged.Invoke(memberProperty.Name));&lt;/span&gt;&lt;/div&gt;
            &lt;/td&gt;
        &lt;/tr&gt;
    &lt;/tbody&gt;
&lt;/table&gt;
&lt;/p&gt;
&lt;div style="margin: 0in 0in 10pt"&gt;&amp;nbsp;Trust me, as ugly as the above seems it&amp;rsquo;s still a million times better than doing it all the way it was originally written. Hopefully this will mature and get better over time as well. Here is an example of the code it produces.&lt;/div&gt;
&lt;p&gt;
&lt;table style="border-right: medium none; border-top: medium none; border-left: medium none; border-bottom: medium none; border-collapse: collapse" border="1" cellspacing="0" cellpadding="0"&gt;
    &lt;tbody&gt;
        &lt;tr&gt;
            &lt;td style="border-right: black 1pt solid; padding-right: 5.4pt; padding-left: 5.4pt; border-top: black 1pt solid; padding-bottom: 0in; border-left: black 1pt solid; width: 6.65in; padding-top: 0in; border-bottom: black 1pt solid; background-color: transparent" valign="top" width="638"&gt;
            &lt;div style="margin: 0in 0in 0pt; line-height: normal"&gt;&lt;span style="font-size: 10pt; color: blue"&gt;private&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: blue"&gt;int&lt;/span&gt; Aid {&lt;/span&gt;&lt;/div&gt;
            &lt;div style="margin: 0in 0in 0pt; line-height: normal"&gt;&lt;span style="font-size: 10pt"&gt;&amp;nbsp;&lt;span style="color: blue"&gt;get&lt;/span&gt; {&lt;/span&gt;&lt;/div&gt;
            &lt;div style="margin: 0in 0in 0pt; line-height: normal"&gt;&lt;span style="font-size: 10pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue"&gt;return&lt;/span&gt; _aid;&lt;/span&gt;&lt;/div&gt;
            &lt;div style="margin: 0in 0in 0pt; line-height: normal"&gt;&lt;span style="font-size: 10pt"&gt;&amp;nbsp;}&lt;/span&gt;&lt;/div&gt;
            &lt;div style="margin: 0in 0in 0pt; line-height: normal"&gt;&lt;span style="font-size: 10pt"&gt;&amp;nbsp;&lt;span style="color: blue"&gt;set&lt;/span&gt; {&lt;/span&gt;&lt;/div&gt;
            &lt;div style="margin: 0in 0in 0pt; line-height: normal"&gt;&lt;span style="font-size: 10pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue"&gt;if&lt;/span&gt; ((_aid != &lt;span style="color: blue"&gt;value&lt;/span&gt;)) {&lt;/span&gt;&lt;/div&gt;
            &lt;div style="margin: 0in 0in 0pt; line-height: normal"&gt;&lt;span style="font-size: 10pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;_aid = &lt;span style="color: blue"&gt;value&lt;/span&gt;;&lt;/span&gt;&lt;/div&gt;
            &lt;div style="margin: 0in 0in 0pt; line-height: normal"&gt;&lt;span style="font-size: 10pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; OnPropertyChanged(&lt;span style="color: #a31515"&gt;&amp;quot;Aid&amp;quot;&lt;/span&gt;);&lt;/span&gt;&lt;/div&gt;
            &lt;div style="margin: 0in 0in 0pt; line-height: normal"&gt;&lt;span style="font-size: 10pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/div&gt;
            &lt;div style="margin: 0in 0in 0pt; line-height: normal"&gt;&lt;span style="font-size: 10pt"&gt;&amp;nbsp;}&lt;/span&gt;&lt;/div&gt;
            &lt;div style="margin: 0in 0in 0pt; line-height: normal"&gt;&lt;span style="font-size: 10pt"&gt;}&lt;/span&gt;&lt;/div&gt;
            &lt;/td&gt;
        &lt;/tr&gt;
    &lt;/tbody&gt;
&lt;/table&gt;
&lt;/p&gt;
&lt;div style="margin: 0in 0in 10pt"&gt;&amp;nbsp;Secondly I have been polishing and simplifying the model framework that comes with NBusiness. I have been working to create an abstract DataAccess API that can easily produce any type of query. Here is an example of how you might insert a new model with the next version of NBusiness.&lt;/div&gt;
&lt;p&gt;
&lt;table style="border-right: medium none; border-top: medium none; border-left: medium none; border-bottom: medium none; border-collapse: collapse" border="1" cellspacing="0" cellpadding="0"&gt;
    &lt;tbody&gt;
        &lt;tr&gt;
            &lt;td style="border-right: black 1pt solid; padding-right: 5.4pt; padding-left: 5.4pt; border-top: black 1pt solid; padding-bottom: 0in; border-left: black 1pt solid; width: 6.65in; padding-top: 0in; border-bottom: black 1pt solid; background-color: transparent" valign="top" width="638"&gt;
            &lt;div style="margin: 0in 0in 0pt; line-height: normal"&gt;&lt;span style="font-size: 10pt; color: #2b91af"&gt;MockModel&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; model = &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;MockModel&lt;/span&gt;();&lt;/span&gt;&lt;/div&gt;
            &lt;div style="margin: 0in 0in 0pt; line-height: normal"&gt;&lt;span style="font-size: 10pt"&gt;model.Name = &lt;span style="color: #a31515"&gt;&amp;quot;testinsert&amp;quot;&lt;/span&gt;;&lt;/span&gt;&lt;/div&gt;
            &lt;div style="margin: 0in 0in 0pt; line-height: normal"&gt;&lt;span style="font-size: 10pt"&gt;model.Save();&lt;/span&gt;&lt;/div&gt;
            &lt;/td&gt;
        &lt;/tr&gt;
    &lt;/tbody&gt;
&lt;/table&gt;
&lt;/p&gt;
&lt;div style="margin: 0in 0in 10pt"&gt;&amp;nbsp;This is as normal and will end up calling into MockModel&amp;rsquo;s &amp;ldquo;InsertModel&amp;rdquo; method which may be implemented like so&lt;/div&gt;
&lt;p&gt;
&lt;table style="border-right: medium none; border-top: medium none; border-left: medium none; border-bottom: medium none; border-collapse: collapse" border="1" cellspacing="0" cellpadding="0"&gt;
    &lt;tbody&gt;
        &lt;tr&gt;
            &lt;td style="border-right: black 1pt solid; padding-right: 5.4pt; padding-left: 5.4pt; border-top: black 1pt solid; padding-bottom: 0in; border-left: black 1pt solid; width: 6.65in; padding-top: 0in; border-bottom: black 1pt solid; background-color: transparent" valign="top" width="638"&gt;
            &lt;div style="margin: 0in 0in 0pt; line-height: normal"&gt;&lt;span style="font-size: 10pt; color: blue"&gt;protected&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: blue"&gt;override&lt;/span&gt; &lt;span style="color: blue"&gt;void&lt;/span&gt; InsertModel(&lt;span style="color: #2b91af"&gt;IQuery&lt;/span&gt; query)&lt;/span&gt;&lt;/div&gt;
            &lt;div style="margin: 0in 0in 0pt; line-height: normal"&gt;&lt;span style="font-size: 10pt"&gt;{&lt;/span&gt;&lt;/div&gt;
            &lt;div style="margin: 0in 0in 0pt; line-height: normal"&gt;&lt;span style="font-size: 10pt"&gt;&amp;nbsp;query.Insert().Into(&lt;/span&gt;&lt;/div&gt;
            &lt;div style="margin: 0in 0in 0pt; line-height: normal"&gt;&lt;span style="font-size: 10pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #2b91af"&gt;MockModel&lt;/span&gt;.&lt;span style="color: #2b91af"&gt;Database&lt;/span&gt;.Table, &lt;/span&gt;&lt;/div&gt;
            &lt;div style="margin: 0in 0in 0pt; line-height: normal"&gt;&lt;span style="font-size: 10pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #2b91af"&gt;MockModel&lt;/span&gt;.&lt;span style="color: #2b91af"&gt;Database&lt;/span&gt;.Name).Values(&lt;span style="color: #a31515"&gt;&amp;quot;@Name&amp;quot;&lt;/span&gt;);&lt;/span&gt;&lt;/div&gt;
            &lt;div style="margin: 0in 0in 0pt; line-height: normal"&gt;&lt;span style="font-size: 10pt"&gt;&amp;nbsp;query.Go();&lt;/span&gt;&lt;/div&gt;
            &lt;div style="margin: 0in 0in 0pt; line-height: normal"&gt;&lt;span style="font-size: 10pt"&gt;&amp;nbsp;query.Parameter(&lt;span style="color: #a31515"&gt;&amp;quot;@Id&amp;quot;&lt;/span&gt;).Direction = &lt;span style="color: #2b91af"&gt;ParameterValueDirection&lt;/span&gt;.Output;&lt;/span&gt;&lt;/div&gt;
            &lt;div style="margin: 0in 0in 0pt; line-height: normal"&gt;&lt;span style="font-size: 10pt"&gt;&amp;nbsp;query.Parameter(&lt;span style="color: #a31515"&gt;&amp;quot;@Name&amp;quot;&lt;/span&gt;).Value = Name;&lt;/span&gt;&lt;/div&gt;
            &lt;div style="margin: 0in 0in 0pt; line-height: normal"&gt;&lt;span style="font-size: 10pt"&gt;&amp;nbsp;query.Load += loader =&amp;gt;&lt;/span&gt;&lt;/div&gt;
            &lt;div style="margin: 0in 0in 0pt; line-height: normal"&gt;&lt;span style="font-size: 10pt"&gt;&amp;nbsp;{&lt;/span&gt;&lt;/div&gt;
            &lt;div style="margin: 0in 0in 0pt; line-height: normal"&gt;&lt;span style="font-size: 10pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;Id = (&lt;span style="color: blue"&gt;int&lt;/span&gt;)query.Parameter(&lt;span style="color: #a31515"&gt;&amp;quot;@Id&amp;quot;&lt;/span&gt;).Value;&lt;/span&gt;&lt;/div&gt;
            &lt;div style="margin: 0in 0in 0pt; line-height: normal"&gt;&lt;span style="font-size: 10pt"&gt;&amp;nbsp;};&lt;/span&gt;&lt;/div&gt;
            &lt;div style="margin: 0in 0in 0pt; line-height: normal"&gt;&lt;span style="font-size: 10pt"&gt;}&lt;/span&gt;&lt;/div&gt;
            &lt;/td&gt;
        &lt;/tr&gt;
    &lt;/tbody&gt;
&lt;/table&gt;
&lt;/p&gt;
&lt;div style="margin: 0in 0in 10pt"&gt;&amp;nbsp;The DataBase.Table and DataBase.Name members are code generated, static ITable and IColumn fields based on your E# model definition.&amp;nbsp;The query object will be passed up to parent objects and down to child objects and will be passed into an abstract provider which will use it to generate SQL and call your database. The IQuery object actually comes from your IDatabaseProvider and may abstract it&amp;nbsp;to work with different databases. My theory at this point is that you could actually parse the query object anyway you like in the IDatabaseProvider and with a little manual work you could even get it working across a webservice.&lt;/div&gt;
&lt;div style="margin: 0in 0in 10pt"&gt;Here is my MockDatabaseProvider for my unit tests. The provider interface is much simpler with this new technique.&lt;/div&gt;
&lt;p&gt;
&lt;table style="border-right: medium none; border-top: medium none; border-left: medium none; border-bottom: medium none; border-collapse: collapse" border="1" cellspacing="0" cellpadding="0"&gt;
    &lt;tbody&gt;
        &lt;tr&gt;
            &lt;td style="border-right: black 1pt solid; padding-right: 5.4pt; padding-left: 5.4pt; border-top: black 1pt solid; padding-bottom: 0in; border-left: black 1pt solid; width: 6.65in; padding-top: 0in; border-bottom: black 1pt solid; background-color: transparent" valign="top" width="638"&gt;
            &lt;div style="margin: 0in 0in 0pt; line-height: normal"&gt;&lt;span style="font-size: 10pt; color: blue"&gt;class&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: #2b91af"&gt;MockDatabaseProvider&lt;/span&gt; : &lt;span style="color: #2b91af"&gt;IDatabaseProvider&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
            &lt;div style="margin: 0in 0in 0pt; line-height: normal"&gt;&lt;span style="font-size: 10pt"&gt;{&lt;/span&gt;&lt;/div&gt;
            &lt;div style="margin: 0in 0in 0pt; line-height: normal"&gt;&lt;span style="font-size: 10pt; color: blue"&gt;&amp;nbsp;#region&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; IDatabaseProvider Members&lt;/span&gt;&lt;/div&gt;
            &lt;div style="margin: 0in 0in 0pt; line-height: normal"&gt;&amp;nbsp;&lt;/div&gt;
            &lt;div style="margin: 0in 0in 0pt; line-height: normal"&gt;&lt;span style="font-size: 10pt"&gt;&amp;nbsp;&lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: #2b91af"&gt;IQuery&lt;/span&gt; Query()&lt;/span&gt;&lt;/div&gt;
            &lt;div style="margin: 0in 0in 0pt; line-height: normal"&gt;&lt;span style="font-size: 10pt"&gt;&amp;nbsp;{&lt;/span&gt;&lt;/div&gt;
            &lt;div style="margin: 0in 0in 0pt; line-height: normal"&gt;&lt;span style="font-size: 10pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;return&lt;/span&gt; &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;SqlQuery&lt;/span&gt;();&lt;/span&gt;&lt;/div&gt;
            &lt;div style="margin: 0in 0in 0pt; line-height: normal"&gt;&lt;span style="font-size: 10pt"&gt;&amp;nbsp;}&lt;/span&gt;&lt;/div&gt;
            &lt;div style="margin: 0in 0in 0pt; line-height: normal"&gt;&amp;nbsp;&lt;/div&gt;
            &lt;div style="margin: 0in 0in 0pt; line-height: normal"&gt;&lt;span style="font-size: 10pt"&gt;&amp;nbsp;&lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: #2b91af"&gt;ITable&lt;/span&gt; Table(&lt;span style="color: blue"&gt;string&lt;/span&gt; name)&lt;/span&gt;&lt;/div&gt;
            &lt;div style="margin: 0in 0in 0pt; line-height: normal"&gt;&lt;span style="font-size: 10pt"&gt;&amp;nbsp;{&lt;/span&gt;&lt;/div&gt;
            &lt;div style="margin: 0in 0in 0pt; line-height: normal"&gt;&lt;span style="font-size: 10pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue"&gt;return&lt;/span&gt; &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;SqlTable&lt;/span&gt;(name);&lt;/span&gt;&lt;/div&gt;
            &lt;div style="margin: 0in 0in 0pt; line-height: normal"&gt;&lt;span style="font-size: 10pt"&gt;&amp;nbsp;}&lt;/span&gt;&lt;/div&gt;
            &lt;div style="margin: 0in 0in 0pt; line-height: normal"&gt;&amp;nbsp;&lt;/div&gt;
            &lt;div style="margin: 0in 0in 0pt; line-height: normal"&gt;&lt;span style="font-size: 10pt"&gt;&amp;nbsp;&lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;void&lt;/span&gt; Execute(&lt;span style="color: #2b91af"&gt;IQuery&lt;/span&gt; query)&lt;/span&gt;&lt;/div&gt;
            &lt;div style="margin: 0in 0in 0pt; line-height: normal"&gt;&lt;span style="font-size: 10pt"&gt;&amp;nbsp;{&lt;/span&gt;&lt;/div&gt;
            &lt;div style="margin: 0in 0in 0pt; line-height: normal"&gt;&lt;span style="font-size: 10pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #2b91af"&gt;MethodCall&lt;/span&gt;.Calls.Add(&lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;MethodCall&lt;/span&gt;(&lt;/span&gt;&lt;/div&gt;
            &lt;div style="margin: 0in 0in 0pt; line-height: normal"&gt;&lt;span style="font-size: 10pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;span style="color: #a31515"&gt;&amp;quot;Execute&amp;quot;&lt;/span&gt;,&lt;/span&gt;&lt;/div&gt;
            &lt;div style="margin: 0in 0in 0pt; line-height: normal"&gt;&lt;span style="font-size: 10pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;new&lt;/span&gt; { Name = &lt;span style="color: #a31515"&gt;&amp;quot;query&amp;quot;&lt;/span&gt;, Value = query }));&lt;/span&gt;&lt;/div&gt;
            &lt;div style="margin: 0in 0in 0pt; line-height: normal"&gt;&amp;nbsp;&lt;/div&gt;
            &lt;div style="margin: 0in 0in 0pt; line-height: normal"&gt;&lt;span style="font-size: 10pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #2b91af"&gt;SqlQuery&lt;/span&gt; sqlQuery = query &lt;span style="color: blue"&gt;as&lt;/span&gt; &lt;span style="color: #2b91af"&gt;SqlQuery&lt;/span&gt;;&lt;/span&gt;&lt;/div&gt;
            &lt;div style="margin: 0in 0in 0pt; line-height: normal"&gt;&lt;span style="font-size: 10pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/div&gt;
            &lt;div style="margin: 0in 0in 0pt; line-height: normal"&gt;&lt;span style="font-size: 10pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: green"&gt;// Simulate setting the identity parameter after an insert&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
            &lt;div style="margin: 0in 0in 0pt; line-height: normal"&gt;&lt;span style="font-size: 10pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #2b91af"&gt;IParameterValue&lt;/span&gt; id = sqlQuery.Parameters.FirstOrDefault(&lt;/span&gt;&lt;/div&gt;
            &lt;div style="margin: 0in 0in 0pt; line-height: normal"&gt;&lt;span style="font-size: 10pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; v =&amp;gt; v.Name == &lt;span style="color: #a31515"&gt;&amp;quot;@Id&amp;quot;&lt;/span&gt;);&lt;/span&gt;&lt;/div&gt;
            &lt;div style="margin: 0in 0in 0pt; line-height: normal"&gt;&lt;span style="font-size: 10pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/div&gt;
            &lt;div style="margin: 0in 0in 0pt; line-height: normal"&gt;&lt;span style="font-size: 10pt; color: blue"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; (id!=&lt;span style="color: blue"&gt;null&lt;/span&gt; &amp;amp;&amp;amp; id.Direction == &lt;span style="color: #2b91af"&gt;ParameterValueDirection&lt;/span&gt;.Output)&lt;/span&gt;&lt;/div&gt;
            &lt;div style="margin: 0in 0in 0pt; line-height: normal"&gt;&lt;span style="font-size: 10pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;/div&gt;
            &lt;div style="margin: 0in 0in 0pt; line-height: normal"&gt;&lt;span style="font-size: 10pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;id.Value = 100;&lt;/span&gt;&lt;/div&gt;
            &lt;div style="margin: 0in 0in 0pt; line-height: normal"&gt;&lt;span style="font-size: 10pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/div&gt;
            &lt;div style="margin: 0in 0in 0pt; line-height: normal"&gt;&amp;nbsp;&lt;/div&gt;
            &lt;div style="margin: 0in 0in 0pt; line-height: normal"&gt;&lt;span style="font-size: 10pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; sqlQuery.OnLoad(&lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;MockLoader&lt;/span&gt;());&lt;/span&gt;&lt;/div&gt;
            &lt;div style="margin: 0in 0in 0pt; line-height: normal"&gt;&lt;span style="font-size: 10pt"&gt;&amp;nbsp;}&lt;/span&gt;&lt;/div&gt;
            &lt;div style="margin: 0in 0in 0pt; line-height: normal"&gt;&amp;nbsp;&lt;/div&gt;
            &lt;div style="margin: 0in 0in 0pt; line-height: normal"&gt;&lt;span style="font-size: 10pt; color: blue"&gt;&amp;nbsp;#endregion&lt;/span&gt;&lt;/div&gt;
            &lt;div style="margin: 0in 0in 0pt; line-height: normal"&gt;&lt;span style="font-size: 10pt"&gt;}&lt;/span&gt;&lt;/div&gt;
            &lt;/td&gt;
        &lt;/tr&gt;
    &lt;/tbody&gt;
&lt;/table&gt;
&lt;/p&gt;</description>
      <guid>http://justnbusiness.com/Blogs/NBusiness_3_Updates.aspx</guid>
      <pubDate>Tue, 24 Jun 2008 07:39:05 GMT</pubDate>
    </item>
    <item>
      <title>Creating Attribute Macros in Boo</title>
      <link>http://justnbusiness.com/Blogs/Creating_Attribute_Macros_in_Boo.aspx</link>
      <description>&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style="margin: 0in 0in 10pt"&gt;Here is a simple example of writing an Attribute Macro in boo. I have created a macro that you can use to ensure that parameters are not null and raise a ArgumentNullException if they are. The interesting thing to note about this is that if you were to do this in C# you would need to use a factory method to inject these methods as aspects at runtime. With Boo macros you are actually changing the code at &lt;b&gt;build&lt;/b&gt; time, which has both positive runtime performance implications and positive architectural changes since you do not need a factory method.&lt;/div&gt;
&lt;div style="margin: 0in 0in 10pt"&gt;Here is an example of how you might use such an attribute:&lt;/div&gt;
&lt;p&gt;
&lt;table style="border-right: medium none; border-top: medium none; border-left: medium none; border-bottom: medium none; border-collapse: collapse" border="1" cellspacing="0" cellpadding="0"&gt;
    &lt;tbody&gt;
        &lt;tr&gt;
            &lt;td style="border-right: black 1pt solid; padding-right: 5.4pt; padding-left: 5.4pt; border-top: black 1pt solid; padding-bottom: 0in; border-left: black 1pt solid; width: 6.65in; padding-top: 0in; border-bottom: black 1pt solid; background-color: transparent" valign="top" width="638"&gt;
            &lt;div style="margin: 0in 0in 0pt; line-height: normal"&gt;&lt;b&gt;&lt;span style="font-size: 10pt; color: green"&gt;namespace &lt;/span&gt;&lt;/b&gt;&lt;span style="font-size: 10pt; color: black"&gt;MacroExample&lt;/span&gt;&lt;/div&gt;
            &lt;div style="margin: 0in 0in 0pt; line-height: normal"&gt;&amp;nbsp;&lt;/div&gt;
            &lt;div style="margin: 0in 0in 0pt; line-height: normal"&gt;&lt;b&gt;&lt;span style="font-size: 10pt; color: green"&gt;import &lt;/span&gt;&lt;/b&gt;&lt;span style="font-size: 10pt; color: black"&gt;System&lt;/span&gt;&lt;/div&gt;
            &lt;div style="margin: 0in 0in 0pt; line-height: normal"&gt;&lt;b&gt;&lt;span style="font-size: 10pt; color: green"&gt;import &lt;/span&gt;&lt;/b&gt;&lt;span style="font-size: 10pt; color: black"&gt;Macros&lt;/span&gt;&lt;/div&gt;
            &lt;div style="margin: 0in 0in 0pt; line-height: normal"&gt;&amp;nbsp;&lt;/div&gt;
            &lt;div style="margin: 0in 0in 0pt; line-height: normal"&gt;&lt;b&gt;&lt;span style="font-size: 10pt; color: blue"&gt;class &lt;/span&gt;&lt;/b&gt;&lt;span style="font-size: 10pt; color: black"&gt;Example:&lt;/span&gt;&lt;/div&gt;
            &lt;div style="margin: 0in 0in 0pt; line-height: normal"&gt;&lt;span style="font-size: 10pt; color: black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-size: 10pt; color: darkgreen"&gt;[&lt;/span&gt;&lt;span style="font-size: 10pt; color: midnightblue"&gt;Ensure&lt;/span&gt;&lt;span style="font-size: 10pt; color: darkgreen"&gt;(&lt;/span&gt;&lt;span style="font-size: 10pt; color: black"&gt;example&lt;/span&gt;&lt;span style="font-size: 10pt; color: darkgreen"&gt;)]&lt;/span&gt;&lt;/div&gt;
            &lt;div style="margin: 0in 0in 0pt; line-height: normal"&gt;&lt;span style="font-size: 10pt; color: darkgreen"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;b&gt;&lt;span style="font-size: 10pt; color: blue"&gt;def &lt;/span&gt;&lt;/b&gt;&lt;span style="font-size: 10pt; color: midnightblue"&gt;DoSomething&lt;/span&gt;&lt;span style="font-size: 10pt; color: darkgreen"&gt;(&lt;/span&gt;&lt;span style="font-size: 10pt; color: black"&gt;example &lt;/span&gt;&lt;b&gt;&lt;span style="font-size: 10pt; color: blue"&gt;as &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style="font-size: 10pt; color: purple"&gt;string&lt;/span&gt;&lt;/b&gt;&lt;span style="font-size: 10pt; color: darkgreen"&gt;)&lt;/span&gt;&lt;span style="font-size: 10pt; color: black"&gt;:&lt;/span&gt;&lt;/div&gt;
            &lt;div style="margin: 0in 0in 0pt; line-height: normal"&gt;&lt;span style="font-size: 10pt; color: black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-size: 10pt; color: purple"&gt;print &lt;/span&gt;&lt;span style="font-size: 10pt; color: black"&gt;example&lt;/span&gt;&lt;span style="font-size: 10pt; color: darkgreen"&gt;.&lt;/span&gt;&lt;span style="font-size: 10pt; color: midnightblue"&gt;ToUpper&lt;/span&gt;&lt;span style="font-size: 10pt; color: darkgreen"&gt;()&lt;/span&gt;&lt;/div&gt;
            &lt;div style="margin: 0in 0in 0pt; line-height: normal"&gt;&lt;span style="font-size: 10pt; color: darkgreen"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/div&gt;
            &lt;div style="margin: 0in 0in 0pt; line-height: normal"&gt;&lt;span style="font-size: 10pt; color: black"&gt;e &lt;/span&gt;&lt;span style="font-size: 10pt; color: darkgreen"&gt;= &lt;/span&gt;&lt;span style="font-size: 10pt; color: midnightblue"&gt;Example&lt;/span&gt;&lt;span style="font-size: 10pt; color: darkgreen"&gt;()&lt;/span&gt;&lt;/div&gt;
            &lt;div style="margin: 0in 0in 0pt; line-height: normal"&gt;&lt;span style="font-size: 10pt; color: black"&gt;e&lt;/span&gt;&lt;span style="font-size: 10pt; color: darkgreen"&gt;.&lt;/span&gt;&lt;span style="font-size: 10pt; color: midnightblue"&gt;DoSomething&lt;/span&gt;&lt;span style="font-size: 10pt; color: darkgreen"&gt;(&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue"&gt;&amp;quot;testing!&amp;quot;&lt;/span&gt;&lt;span style="font-size: 10pt; color: darkgreen"&gt;)&lt;/span&gt;&lt;/div&gt;
            &lt;div style="margin: 0in 0in 0pt; line-height: normal"&gt;&lt;span style="font-size: 10pt; color: black"&gt;e&lt;/span&gt;&lt;span style="font-size: 10pt; color: darkgreen"&gt;.&lt;/span&gt;&lt;span style="font-size: 10pt; color: midnightblue"&gt;DoSomething&lt;/span&gt;&lt;span style="font-size: 10pt; color: darkgreen"&gt;(&lt;/span&gt;&lt;b&gt;&lt;span style="font-size: 10pt; color: black"&gt;null&lt;/span&gt;&lt;/b&gt;&lt;span style="font-size: 10pt; color: darkgreen"&gt;)&lt;/span&gt;&lt;/div&gt;
            &lt;div style="margin: 0in 0in 0pt; line-height: normal"&gt;&amp;nbsp;&lt;/div&gt;
            &lt;div style="margin: 0in 0in 0pt; line-height: normal"&gt;&lt;span style="font-size: 10pt; color: purple"&gt;print &lt;/span&gt;&lt;span style="font-size: 10pt; color: blue"&gt;&amp;quot;Press any key to continue . . . &amp;quot;&lt;/span&gt;&lt;/div&gt;
            &lt;div style="margin: 0in 0in 0pt; line-height: normal"&gt;&lt;span style="font-size: 10pt; color: black"&gt;Console&lt;/span&gt;&lt;span style="font-size: 10pt; color: darkgreen"&gt;.&lt;/span&gt;&lt;span style="font-size: 10pt; color: midnightblue"&gt;ReadKey&lt;/span&gt;&lt;span style="font-size: 10pt; color: darkgreen"&gt;(&lt;/span&gt;&lt;b&gt;&lt;span style="font-size: 10pt; color: black"&gt;true&lt;/span&gt;&lt;/b&gt;&lt;span style="font-size: 10pt; color: darkgreen"&gt;)&lt;/span&gt;&lt;/div&gt;
            &lt;/td&gt;
        &lt;/tr&gt;
    &lt;/tbody&gt;
&lt;/table&gt;
&lt;/p&gt;
&lt;div style="margin: 0in 0in 10pt"&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style="margin: 0in 0in 10pt"&gt;I have declared a class called Example with a single method DoSomething. On that method we have attached an Attribute called Ensure. If you were using standard Aspect Oriented Programming techniques you would need some custom code to inspect this attribute at runtime and build a dynamic type and method to wrap the logic of the ensure attribute.&lt;/div&gt;
&lt;div style="margin: 0in 0in 10pt"&gt;In Boo, since my EnsureAttribute inherits from AbstractMacroAttribute the logic of the Attribute will actually be run at build time, not runtime. Note the parameter in the constructor, the &amp;lsquo;example&amp;rsquo;. There are no quotes around this because it is not a string. It actually comes into the constructor as a ReferenceExpression which I can use to match to the methods parameters.&lt;/div&gt;
&lt;div style="margin: 0in 0in 10pt"&gt;Here is the ensure Attribute code:&lt;/div&gt;
&lt;p&gt;
&lt;table style="border-right: medium none; border-top: medium none; border-left: medium none; border-bottom: medium none; border-collapse: collapse" border="1" cellspacing="0" cellpadding="0"&gt;
    &lt;tbody&gt;
        &lt;tr&gt;
            &lt;td style="border-right: black 1pt solid; padding-right: 5.4pt; padding-left: 5.4pt; border-top: black 1pt solid; padding-bottom: 0in; border-left: black 1pt solid; width: 6.65in; padding-top: 0in; border-bottom: black 1pt solid; background-color: transparent" valign="top" width="638"&gt;
            &lt;div style="margin: 0in 0in 0pt; line-height: normal"&gt;&lt;b&gt;&lt;span style="font-size: 10pt; color: green"&gt;namespace &lt;/span&gt;&lt;/b&gt;&lt;span style="font-size: 10pt; color: black"&gt;Macros&lt;/span&gt;&lt;/div&gt;
            &lt;div style="margin: 0in 0in 0pt; line-height: normal"&gt;&amp;nbsp;&lt;/div&gt;
            &lt;div style="margin: 0in 0in 0pt; line-height: normal"&gt;&lt;b&gt;&lt;span style="font-size: 10pt; color: green"&gt;import &lt;/span&gt;&lt;/b&gt;&lt;span style="font-size: 10pt; color: black"&gt;System&lt;/span&gt;&lt;/div&gt;
            &lt;div style="margin: 0in 0in 0pt; line-height: normal"&gt;&lt;b&gt;&lt;span style="font-size: 10pt; color: green"&gt;import &lt;/span&gt;&lt;/b&gt;&lt;span style="font-size: 10pt; color: black"&gt;Boo&lt;/span&gt;&lt;span style="font-size: 10pt; color: darkgreen"&gt;.&lt;/span&gt;&lt;span style="font-size: 10pt; color: black"&gt;Lang&lt;/span&gt;&lt;span style="font-size: 10pt; color: darkgreen"&gt;.&lt;/span&gt;&lt;span style="font-size: 10pt; color: black"&gt;Compiler&lt;/span&gt;&lt;span style="font-size: 10pt; color: darkgreen"&gt;.&lt;/span&gt;&lt;span style="font-size: 10pt; color: black"&gt;Ast&lt;/span&gt;&lt;/div&gt;
            &lt;div style="margin: 0in 0in 0pt; line-height: normal"&gt;&amp;nbsp;&lt;/div&gt;
            &lt;div style="margin: 0in 0in 0pt; line-height: normal"&gt;&lt;span style="font-size: 10pt; color: darkgreen"&gt;[&lt;/span&gt;&lt;span style="font-size: 10pt; color: midnightblue"&gt;AttributeUsage&lt;/span&gt;&lt;span style="font-size: 10pt; color: darkgreen"&gt;(&lt;/span&gt;&lt;span style="font-size: 10pt; color: black"&gt;AttributeTargets&lt;/span&gt;&lt;span style="font-size: 10pt; color: darkgreen"&gt;.&lt;/span&gt;&lt;span style="font-size: 10pt; color: black"&gt;Method&lt;/span&gt;&lt;span style="font-size: 10pt; color: darkgreen"&gt;)]&lt;/span&gt;&lt;/div&gt;
            &lt;div style="margin: 0in 0in 0pt; line-height: normal"&gt;&lt;b&gt;&lt;span style="font-size: 10pt; color: blue"&gt;class &lt;/span&gt;&lt;/b&gt;&lt;span style="font-size: 10pt; color: midnightblue"&gt;EnsureAttribute&lt;/span&gt;&lt;span style="font-size: 10pt; color: darkgreen"&gt;(&lt;/span&gt;&lt;span style="font-size: 10pt; color: black"&gt;Boo&lt;/span&gt;&lt;span style="font-size: 10pt; color: darkgreen"&gt;.&lt;/span&gt;&lt;span style="font-size: 10pt; color: black"&gt;Lang&lt;/span&gt;&lt;span style="font-size: 10pt; color: darkgreen"&gt;.&lt;/span&gt;&lt;span style="font-size: 10pt; color: black"&gt;Compiler&lt;/span&gt;&lt;span style="font-size: 10pt; color: darkgreen"&gt;.&lt;/span&gt;&lt;span style="font-size: 10pt; color: black"&gt;AbstractAstAttribute&lt;/span&gt;&lt;span style="font-size: 10pt; color: darkgreen"&gt;)&lt;/span&gt;&lt;span style="font-size: 10pt; color: black"&gt;:&lt;/span&gt;&lt;/div&gt;
            &lt;div style="margin: 0in 0in 0pt; line-height: normal"&gt;&lt;span style="font-size: 10pt; color: black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/div&gt;
            &lt;div style="margin: 0in 0in 0pt; line-height: normal"&gt;&lt;span style="font-size: 10pt; color: black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;b&gt;&lt;span style="font-size: 10pt; color: blue"&gt;private &lt;/span&gt;&lt;/b&gt;&lt;span style="font-size: 10pt; color: black"&gt;_parameter &lt;/span&gt;&lt;b&gt;&lt;span style="font-size: 10pt; color: blue"&gt;as &lt;/span&gt;&lt;/b&gt;&lt;span style="font-size: 10pt; color: black"&gt;ReferenceExpression&lt;/span&gt;&lt;/div&gt;
            &lt;div style="margin: 0in 0in 0pt; line-height: normal"&gt;&lt;span style="font-size: 10pt; color: black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;b&gt;&lt;span style="font-size: 10pt; color: blue"&gt;public &lt;/span&gt;&lt;/b&gt;&lt;span style="font-size: 10pt; color: black"&gt;Parameter &lt;/span&gt;&lt;b&gt;&lt;span style="font-size: 10pt; color: blue"&gt;as &lt;/span&gt;&lt;/b&gt;&lt;span style="font-size: 10pt; color: black"&gt;ReferenceExpression:&lt;/span&gt;&lt;/div&gt;
            &lt;div style="margin: 0in 0in 0pt; line-height: normal"&gt;&lt;span style="font-size: 10pt; color: black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-size: 10pt; color: saddlebrown"&gt;get&lt;/span&gt;&lt;span style="font-size: 10pt; color: black"&gt;:&lt;/span&gt;&lt;/div&gt;
            &lt;div style="margin: 0in 0in 0pt; line-height: normal"&gt;&lt;span style="font-size: 10pt; color: black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-size: 10pt; color: navy"&gt;return &lt;/span&gt;&lt;span style="font-size: 10pt; color: black"&gt;_parameter&lt;/span&gt;&lt;/div&gt;
            &lt;div style="margin: 0in 0in 0pt; line-height: normal"&gt;&lt;span style="font-size: 10pt; color: black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/div&gt;
            &lt;div style="margin: 0in 0in 0pt; line-height: normal"&gt;&lt;span style="font-size: 10pt; color: black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;b&gt;&lt;span style="font-size: 10pt; color: blue"&gt;def constructor&lt;/span&gt;&lt;/b&gt;&lt;span style="font-size: 10pt; color: darkgreen"&gt;(&lt;/span&gt;&lt;span style="font-size: 10pt; color: black"&gt;parameter &lt;/span&gt;&lt;b&gt;&lt;span style="font-size: 10pt; color: blue"&gt;as &lt;/span&gt;&lt;/b&gt;&lt;span style="font-size: 10pt; color: black"&gt;ReferenceExpression&lt;/span&gt;&lt;span style="font-size: 10pt; color: darkgreen"&gt;)&lt;/span&gt;&lt;span style="font-size: 10pt; color: black"&gt;:&lt;/span&gt;&lt;/div&gt;
            &lt;div style="margin: 0in 0in 0pt; line-height: normal"&gt;&lt;span style="font-size: 10pt; color: black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _parameter &lt;/span&gt;&lt;span style="font-size: 10pt; color: darkgreen"&gt;= &lt;/span&gt;&lt;span style="font-size: 10pt; color: black"&gt;parameter&lt;/span&gt;&lt;/div&gt;
            &lt;div style="margin: 0in 0in 0pt; line-height: normal"&gt;&lt;span style="font-size: 10pt; color: black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/div&gt;
            &lt;div style="margin: 0in 0in 0pt; line-height: normal"&gt;&lt;span style="font-size: 10pt; color: black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-size: 10pt; color: brown"&gt;override &lt;/span&gt;&lt;b&gt;&lt;span style="font-size: 10pt; color: blue"&gt;def &lt;/span&gt;&lt;/b&gt;&lt;span style="font-size: 10pt; color: midnightblue"&gt;Apply&lt;/span&gt;&lt;span style="font-size: 10pt; color: darkgreen"&gt;(&lt;/span&gt;&lt;span style="font-size: 10pt; color: black"&gt;node &lt;/span&gt;&lt;b&gt;&lt;span style="font-size: 10pt; color: blue"&gt;as &lt;/span&gt;&lt;/b&gt;&lt;span style="font-size: 10pt; color: black"&gt;Node&lt;/span&gt;&lt;span style="font-size: 10pt; color: darkgreen"&gt;)&lt;/span&gt;&lt;span style="font-size: 10pt; color: black"&gt;: &lt;/span&gt;&lt;/div&gt;
            &lt;div style="margin: 0in 0in 0pt; line-height: normal"&gt;&lt;span style="font-size: 10pt; color: black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/div&gt;
            &lt;div style="margin: 0in 0in 0pt; line-height: normal"&gt;&lt;span style="font-size: 10pt; color: black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-size: 10pt; color: #04abab"&gt;target &lt;/span&gt;&lt;span style="font-size: 10pt; color: darkgreen"&gt;= &lt;/span&gt;&lt;b&gt;&lt;span style="font-size: 10pt; color: blue"&gt;cast&lt;/span&gt;&lt;/b&gt;&lt;span style="font-size: 10pt; color: darkgreen"&gt;(&lt;/span&gt;&lt;span style="font-size: 10pt; color: black"&gt;Boo&lt;/span&gt;&lt;span style="font-size: 10pt; color: darkgreen"&gt;.&lt;/span&gt;&lt;span style="font-size: 10pt; color: black"&gt;Lang&lt;/span&gt;&lt;span style="font-size: 10pt; color: darkgreen"&gt;.&lt;/span&gt;&lt;span style="font-size: 10pt; color: black"&gt;Compiler&lt;/span&gt;&lt;span style="font-size: 10pt; color: darkgreen"&gt;.&lt;/span&gt;&lt;span style="font-size: 10pt; color: black"&gt;Ast&lt;/span&gt;&lt;span style="font-size: 10pt; color: darkgreen"&gt;.&lt;/span&gt;&lt;span style="font-size: 10pt; color: black"&gt;Method&lt;/span&gt;&lt;span style="font-size: 10pt; color: darkgreen"&gt;, &lt;/span&gt;&lt;span style="font-size: 10pt; color: black"&gt;node&lt;/span&gt;&lt;span style="font-size: 10pt; color: darkgreen"&gt;)&lt;/span&gt;&lt;/div&gt;
            &lt;div style="margin: 0in 0in 0pt; line-height: normal"&gt;&lt;span style="font-size: 10pt; color: darkgreen"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/div&gt;
            &lt;div style="margin: 0in 0in 0pt; line-height: normal"&gt;&lt;span style="font-size: 10pt; color: darkgreen"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-size: 10pt; color: black"&gt;parameter &lt;/span&gt;&lt;b&gt;&lt;span style="font-size: 10pt; color: blue"&gt;as &lt;/span&gt;&lt;/b&gt;&lt;span style="font-size: 10pt; color: black"&gt;ParameterDeclaration&lt;/span&gt;&lt;/div&gt;
            &lt;div style="margin: 0in 0in 0pt; line-height: normal"&gt;&lt;span style="font-size: 10pt; color: black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;b&gt;&lt;span style="font-size: 10pt; color: blue"&gt;for &lt;/span&gt;&lt;/b&gt;&lt;span style="font-size: 10pt; color: black"&gt;p &lt;/span&gt;&lt;b&gt;&lt;span style="font-size: 10pt; color: blue"&gt;in &lt;/span&gt;&lt;/b&gt;&lt;span style="font-size: 10pt; color: black"&gt;target&lt;/span&gt;&lt;span style="font-size: 10pt; color: darkgreen"&gt;.&lt;/span&gt;&lt;span style="font-size: 10pt; color: black"&gt;Parameters:&lt;/span&gt;&lt;/div&gt;
            &lt;div style="margin: 0in 0in 0pt; line-height: normal"&gt;&lt;span style="font-size: 10pt; color: black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;b&gt;&lt;span style="font-size: 10pt; color: blue"&gt;if &lt;/span&gt;&lt;/b&gt;&lt;span style="font-size: 10pt; color: black"&gt;p&lt;/span&gt;&lt;span style="font-size: 10pt; color: darkgreen"&gt;.&lt;/span&gt;&lt;span style="font-size: 10pt; color: black"&gt;Name &lt;/span&gt;&lt;span style="font-size: 10pt; color: darkgreen"&gt;== &lt;/span&gt;&lt;span style="font-size: 10pt; color: black"&gt;_parameter&lt;/span&gt;&lt;span style="font-size: 10pt; color: darkgreen"&gt;.&lt;/span&gt;&lt;span style="font-size: 10pt; color: black"&gt;Name:&lt;/span&gt;&lt;/div&gt;
            &lt;div style="margin: 0in 0in 0pt; line-height: normal"&gt;&lt;span style="font-size: 10pt; color: black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; parameter &lt;/span&gt;&lt;span style="font-size: 10pt; color: darkgreen"&gt;= &lt;/span&gt;&lt;span style="font-size: 10pt; color: black"&gt;p&lt;/span&gt;&lt;/div&gt;
            &lt;div style="margin: 0in 0in 0pt; line-height: normal"&gt;&lt;span style="font-size: 10pt; color: black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-size: 10pt; color: navy"&gt;break&lt;/span&gt;&lt;/div&gt;
            &lt;div style="margin: 0in 0in 0pt; line-height: normal"&gt;&lt;span style="font-size: 10pt; color: navy"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/div&gt;
            &lt;div style="margin: 0in 0in 0pt; line-height: normal"&gt;&lt;span style="font-size: 10pt; color: navy"&gt;&amp;nbs