<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>pushbomb &#187; ORM</title>
	<atom:link href="http://team.pushbomb.com/category/software-as-strategic/orm-software-as-strategic/feed/" rel="self" type="application/rss+xml" />
	<link>http://team.pushbomb.com</link>
	<description>tv programmed by the collective</description>
	<lastBuildDate>Tue, 05 Jan 2010 22:49:48 +0000</lastBuildDate>
	<generator>http://wordpress.com/</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<cloud domain='team.pushbomb.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://www.gravatar.com/blavatar/a08732ed34e6814d5a5513fe8cde5696?s=96&#038;d=http://s2.wp.com/i/buttonw-com.png</url>
		<title>pushbomb &#187; ORM</title>
		<link>http://team.pushbomb.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://team.pushbomb.com/osd.xml" title="pushbomb" />
	<atom:link rel='hub' href='http://team.pushbomb.com/?pushpress=hub'/>
		<item>
		<title>NHibernate Profiler from Ayende : Maturity in ORM is here</title>
		<link>http://team.pushbomb.com/2008/11/06/nhibernate_profiler_orm_maturity_is_here/</link>
		<comments>http://team.pushbomb.com/2008/11/06/nhibernate_profiler_orm_maturity_is_here/#comments</comments>
		<pubDate>Thu, 06 Nov 2008 07:31:13 +0000</pubDate>
		<dc:creator>Damon Wilder Carr</dc:creator>
				<category><![CDATA[Framework Design]]></category>
		<category><![CDATA[Industry News]]></category>
		<category><![CDATA[ORM]]></category>
		<category><![CDATA[Software Futures]]></category>
		<category><![CDATA[nhibernate]]></category>
		<category><![CDATA[ADO.NET]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[C# 3.0]]></category>
		<category><![CDATA[Domain]]></category>
		<category><![CDATA[Domain Driven]]></category>
		<category><![CDATA[Linq]]></category>
		<category><![CDATA[Linq to Entities]]></category>
		<category><![CDATA[NHibernate Profiler]]></category>
		<category><![CDATA[SQL Profiler]]></category>

		<guid isPermaLink="false">http://dcarr.wordpress.com/2008/11/06/nhibernate_profiler_orm_maturity_is_here/</guid>
		<description><![CDATA[The always astoundingly good Ayende (Oren) is getting ready to release one of the most compelling software tools for people doing far less work with far higher quality by using NHibernate.  For the last two years or so I keep thinking ‘soon’ I can just assume teams will understand the facts around ORM and I continue to be astounded at the waste I encounter instead.





That MS SQL Certification is hard to let go I realize but is it worth acting like Sisyphus for? I have more interesting things to do and I KNOW your stakeholders are not cool with you wasting their money.





I simply mean you can think, talk, brainstorm etc. with your ‘domain experts’ without the silly attempt to handle two different systems (Relational and OO) of thought. You all share one. And you should know it. It’s called object oriented.<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=team.pushbomb.com&blog=2366446&post=1109&subd=dcarr&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<p style="text-align:right;">Stop</p>
<p style="text-align:right;">Writing.</p>
<p style="text-align:right;">Data</p>
<p style="text-align:right;">Access</p>
<p style="text-align:right;">Code</p>
<p>That MS SQL Certification is hard to let go I realize but is it worth acting like <a target="_blank" href="http://en.wikipedia.org/wiki/Sisyphus_">Sisyphus </a><a target="_blank" href="http://en.wikipedia.org/wiki/Sysphus_"></a>for? I have more interesting things to do and <strong>I KNOW your stakeholders are not cool with you wasting their money.</strong></p>
<p><strong></strong></p>
<p><a href="http://en.wikipedia.org/wiki/Image:Nekyia_Staatliche_Antikensammlungen_1494_n2.jpg"><img style="display:inline;margin:10px 0 10px 25px;" border="0" alt="" align="right" src="http://upload.wikimedia.org/wikipedia/commons/thumb/5/58/Nekyia_Staatliche_Antikensammlungen_1494_n2.jpg/280px-Nekyia_Staatliche_Antikensammlungen_1494_n2.jpg" width="233" height="240" /></a></p>
<p>I simply mean you can think, talk, brainstorm etc. with your ‘domain experts’ without the silly attempt to handle two different systems (Relational and OO) of thought. You all share one. And you should know it. It’s called object oriented.</p>
<p>Anyway… Enough pithiness (is that a word?)…</p>
<p>The always astoundingly good <a target="_blank" href="http://www.ayende.com">Ayende</a> (Oren) is getting ready to release one of the most compelling software tools for people wasting far less and ‘for free’ gaining far higher quality by using NHibernate.</p>
<p>I expect it will be a fantastic tool to use in trying to work with teams desperately clutching their ADO.NET books….</p>
<p><a href="http://ayende.com/">This is all his content from here out:</a></p>
<p>NH Prof has reached the level in which I can actually talk about the features that it has in more than abstract terms. There is still a big feature area that I want to cover (which should be a nice surprise), but the basics are there, and today I had ample proof that it is maturing just nicely. I was able to deal with quite a few of the remaining tasks by applying check listing. Basically, to do X, I had to do A,B &amp; C. Trivially simple, and quite satisfying.</p>
<p>Test coverage went back up to over 90% on the backend again, which is also nice.</p>
<p>Anyway, let us start with the tour, shall we?</p>
<p><a href="http://ayende.com/Blog/archive/2008/11/04/nh-prof-a-guided-tour.aspx"><img border="0" alt="image" src="http://ayende.com/Blog/images/ayende_com/Blog/WindowsLiveWriter/NHProfAguidedtour_6720/image_thumb_2.png" width="655" height="557" /></a></p>
<p>The left upper pane shows the captured sessions. You can see the number of statements per each session, as well as the length time it was open.&#160; Let us move down a bit, and explore statistics.</p>
<p><a href="http://ayende.com/Blog/images/ayende_com/Blog/WindowsLiveWriter/NHProfAguidedtour_6720/image_8.png"><img border="0" alt="image" src="http://ayende.com/Blog/images/ayende_com/Blog/WindowsLiveWriter/NHProfAguidedtour_6720/image_thumb_3.png" width="655" height="557" /></a></p>
<p>The session factory statistics pane include a <em>lot</em> of information about NHibernate, which can give you a good indication about what is going on in the application in a global fashion. In 2.0 we have quite a few data points, but the statistics feature was significantly expanded in 2.1, and contains a lot more data and more finely grained statistics.</p>
<p>But that is probably not what gets you excited. What is likely to thrill you are the statement view.</p>
<p><a href="http://ayende.com/Blog/images/ayende_com/Blog/WindowsLiveWriter/NHProfAguidedtour_6720/image_12.png"><img border="0" alt="image" src="http://ayende.com/Blog/images/ayende_com/Blog/WindowsLiveWriter/NHProfAguidedtour_6720/image_thumb_5.png" width="748" height="495" /></a></p>
<p>I put a lot of though into designing those (well, into thinking about them, the actual design was handled by people who actually know what they are doing, design wise). The upper section of the screen is optimized to allow the human eye to quickly scan it in order to find all sorts of interesting patterns. Compare this to SQL Profiler UI, and you can see why I think that this is a much better version, just from that stand point.</p>
<p>The bottom half, however, is what I <em>really</em> like. This is the part I use the most often, in order to really see what is going on. I did an ad-hoc demo of the profiler in Dallas, and one of the things that cam out of this was the format that you see on the lower pane. This UI is set to allow you to just copy the query from the profiler and immediately execute a readable, easy to understand query on Management Studio or Toad. Again, another piece where I think that I providing a lot more value than SQL Profiler does.</p>
<p>For quick reference, we put the parameter values on the left of the query, so you can inspect them without having to go into a potentially complex queries to try to figure out what is what.</p>
<p>But this isn&#8217;t where it ends, let us take a look at the stack trace tab:</p>
<p><a href="http://ayende.com/Blog/images/ayende_com/Blog/WindowsLiveWriter/NHProfAguidedtour_6720/image_16.png"><img border="0" alt="image" src="http://ayende.com/Blog/images/ayende_com/Blog/WindowsLiveWriter/NHProfAguidedtour_6720/image_thumb_7.png" width="751" height="504" /></a></p>
<p>The stack trace will let you correlate a query and the code that generated it, and not only that, it will take you directly from the query to the code (opening visual studio, loading the file and landing you directly in the place in the code that caused this query to be executed.</p>
<p>Oh, and one more thing&#8230;</p>
<p><a href="http://ayende.com/Blog/images/ayende_com/Blog/WindowsLiveWriter/NHProfAguidedtour_6720/image_18.png"><img border="0" alt="image" src="http://ayende.com/Blog/images/ayende_com/Blog/WindowsLiveWriter/NHProfAguidedtour_6720/image_thumb_8.png" width="764" height="538" /></a></p>
<p>I have over four years of experience working with NHibernate, a time during which I learned quite a bit about what work, what doesn&#8217;t and what kind of things we should be aware off. The profiler has given me the chance to codify a lot of these patterns, and put them in a way that allow you to have apply early detection and prevention mechanisms.</p>
<p>And one last thing, this time it will really be the last. Session / Entity inspection:</p>
<p><a href="http://ayende.com/Blog/images/ayende_com/Blog/WindowsLiveWriter/NHProfAguidedtour_6720/image_20.png"><img style="display:block;float:none;margin-left:auto;margin-right:auto;" border="0" alt="image" src="http://ayende.com/Blog/images/ayende_com/Blog/WindowsLiveWriter/NHProfAguidedtour_6720/image_thumb_9.png" width="749" height="527" /></a></p>
<p>You can see exactly what are the entities that were loaded by this session, including counts per entity and all the ids that were loaded.</p>
<p>I hope to be able to open it for beta testing in two to three weeks, and a 1.0 release about a month after that. Pricing is tentatively set at 200$ per user, but this is subject to change.</p>
<p><a title="http://ayende.com/Blog/archive/2008/11/04/nh-prof-a-guided-tour.aspx" href="http://ayende.com/Blog/archive/2008/11/04/nh-prof-a-guided-tour.aspx">http://ayende.com/Blog/archive/2008/11/04/nh-prof-a-guided-tour.aspx</a></p>
<h3>Amazing stuff……Buy this from Oren!</h3>
<br />Posted in Framework Design, Industry News, nhibernate, ORM, Software Futures Tagged: ADO.NET, C#, C# 3.0, Domain, Domain Driven, Linq, Linq to Entities, nhibernate, NHibernate Profiler, ORM, SQL Profiler <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/dcarr.wordpress.com/1109/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/dcarr.wordpress.com/1109/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/dcarr.wordpress.com/1109/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/dcarr.wordpress.com/1109/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/dcarr.wordpress.com/1109/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/dcarr.wordpress.com/1109/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/dcarr.wordpress.com/1109/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/dcarr.wordpress.com/1109/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/dcarr.wordpress.com/1109/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/dcarr.wordpress.com/1109/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=team.pushbomb.com&blog=2366446&post=1109&subd=dcarr&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://team.pushbomb.com/2008/11/06/nhibernate_profiler_orm_maturity_is_here/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/7b572cbcda5a17fe984e7dd1ddc9c3d6?s=96&#38;d=&#38;r=PG" medium="image">
			<media:title type="html">pushbomb</media:title>
		</media:content>

		<media:content url="http://upload.wikimedia.org/wikipedia/commons/thumb/5/58/Nekyia_Staatliche_Antikensammlungen_1494_n2.jpg/280px-Nekyia_Staatliche_Antikensammlungen_1494_n2.jpg" medium="image" />

		<media:content url="http://ayende.com/Blog/images/ayende_com/Blog/WindowsLiveWriter/NHProfAguidedtour_6720/image_thumb_2.png" medium="image">
			<media:title type="html">image</media:title>
		</media:content>

		<media:content url="http://ayende.com/Blog/images/ayende_com/Blog/WindowsLiveWriter/NHProfAguidedtour_6720/image_thumb_3.png" medium="image">
			<media:title type="html">image</media:title>
		</media:content>

		<media:content url="http://ayende.com/Blog/images/ayende_com/Blog/WindowsLiveWriter/NHProfAguidedtour_6720/image_thumb_5.png" medium="image">
			<media:title type="html">image</media:title>
		</media:content>

		<media:content url="http://ayende.com/Blog/images/ayende_com/Blog/WindowsLiveWriter/NHProfAguidedtour_6720/image_thumb_7.png" medium="image">
			<media:title type="html">image</media:title>
		</media:content>

		<media:content url="http://ayende.com/Blog/images/ayende_com/Blog/WindowsLiveWriter/NHProfAguidedtour_6720/image_thumb_8.png" medium="image">
			<media:title type="html">image</media:title>
		</media:content>

		<media:content url="http://ayende.com/Blog/images/ayende_com/Blog/WindowsLiveWriter/NHProfAguidedtour_6720/image_thumb_9.png" medium="image">
			<media:title type="html">image</media:title>
		</media:content>
	</item>
		<item>
		<title>NHibernate 2.0 gold Released &#8211; Must Wait for &#8216;Linq to NHibernate&#8217;</title>
		<link>http://team.pushbomb.com/2008/08/24/nhibernate-20-gold-released-must-wait-for-linq-to-nhibernate/</link>
		<comments>http://team.pushbomb.com/2008/08/24/nhibernate-20-gold-released-must-wait-for-linq-to-nhibernate/#comments</comments>
		<pubDate>Sun, 24 Aug 2008 18:00:54 +0000</pubDate>
		<dc:creator>Damon Wilder Carr</dc:creator>
				<category><![CDATA[Industry News]]></category>
		<category><![CDATA[ORM]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[nhibernate]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[Advanced .NET]]></category>
		<category><![CDATA[C# 3.0]]></category>
		<category><![CDATA[Linq]]></category>
		<category><![CDATA[Linq to Entities]]></category>
		<category><![CDATA[Linq to NHibernate]]></category>

		<guid isPermaLink="false">http://dcarr.wordpress.com/2008/08/24/nhibernate-20-gold-released-must-wait-for-linq-to-nhibernate/</guid>
		<description><![CDATA[As expected, NHibernate 2.0 went gold yesterday and is available for download. This is official release 2.0.0 GA. Please ensure you review this list of breaking changes from the release notes. Linq to NHibernate is available for now only via the NHibernate Contrib project and is not included in this NHibernate release.<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=team.pushbomb.com&blog=2366446&post=762&subd=dcarr&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.dotnetkicks.com/kick/?url=http%3a%2f%2fblog.domaindotnet.com%2f2008%2f08%2f24%2fnhibernate-20-gold-released-must-wait-for-linq-to-nhibernate%2f"><img class="alignright" style="border:0 none;" src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http%3a%2f%2fblog.domaindotnet.com%2f2008%2f08%2f24%2fnhibernate-20-gold-released-must-wait-for-linq-to-nhibernate%2f" border="0" alt="kick it on DotNetKicks.com" width="82" height="18" /></a></p>
<p><a href="https://sourceforge.net/project/showfiles.php?group_id=73818&amp;package_id=73969" target="_blank">NHibernate 2.0</a> went gold yesterday and is available for download from <a href="https://sourceforge.net/project/showfiles.php?group_id=73818&amp;package_id=73969" target="_blank">here</a>.</p>
<p><a href="https://sourceforge.net/project/showfiles.php?group_id=73818&amp;package_id=73969" target="_blank"></a></p>
<p>This is official release 2.0.0 GA. Please ensure you review this list of breaking changes from the release notes (also main items briefly listed below).</p>
<h2><strong>NOTE: Correction/clarification made 8/26 on Linq to NHibernate location.</strong></h2>
<p style="text-align:center;">The much anticipated <a href="http://en.wikipedia.org/wiki/Language_Integrated_Query" target="_blank">Linq</a> to NHibernate is available for now only via the NHibernate Contrib project and is not included in this NHibernate release.<br />
<em><br />
Although likely to change, there does not appear to be an installer for Linq to NHibernate so it must be accessed from the source code. To gain access to this, you will need a <a href="http://tortoisesvn.tigris.org/" target="_blank">subversion client such as Tortoise</a>, and then download the code.</em></p>
<blockquote>
<h3>To download ‘Linq to NHibernate&#8217; from <a href="http://sourceforge.net/svn/?group_id=216446" target="_blank">the Trunk go here</a></h3>
</blockquote>
<p>The location of the bits can be found under the repository at this location:</p>
<p><a title="http://nhcontrib.svn.sourceforge.net/viewvc/nhcontrib/trunk/src/NHibernate.Linq/" href="http://nhcontrib.svn.sourceforge.net/viewvc/nhcontrib/trunk/src/NHibernate.Linq/" target="_blank">http://nhcontrib.svn.sourceforge.net/viewvc/nhcontrib/trunk/src/NHibernate.Linq/</a><br />
NOTE: Pictures Below Generated from <a href="http://www.ndepend.com/" target="_blank">NDepend</a>, a must-have tool for .NET Development</p>
<h1>gold release 2.0.0.GA</h1>
<h2>BREAKING CHANGES from NH1.2.1GA to NH2.0.0</h2>
<ul>
<li>
<h2>Infrastructure</h2>
<ul>
<li>.NET 1.1 is no longer supported</li>
<li>Nullables.NHibernate is no longer supported (use nullable types of .NET 2.0)</li>
<li>Contrib moved. New Location</li>
</ul>
</li>
</ul>
<div class="mceTemp mceIEcenter"><a title="NDepend Analysis" href="http://dcarr.files.wordpress.com/2008/08/componentdependenciesdiagram1.png" target="_blank"><img class="aligncenter" src="http://dcarr.files.wordpress.com/2008/08/techsmithwor48f.png?w=437&#038;h=625" alt="NDepend Analysis" width="437" height="625" /></a></div>
<div id="attachment_764" class="wp-caption aligncenter" style="width: 456px"><a href="http://dcarr.files.wordpress.com/2008/08/visualndependview1.png"><img class="size-medium wp-image-764" style="border:2px solid black;" src="http://dcarr.files.wordpress.com/2008/08/visualndependview1.png?w=446&#038;h=446" alt="" width="446" height="446" /></a><p class="wp-caption-text">NDepend Analysis</p></div>
<p><a href="http://dcarr.files.wordpress.com/2008/08/techsmithword00.png"><img class="alignright" style="border:2px solid black;margin:10px;" src="http://dcarr.files.wordpress.com/2008/08/techsmithword00.png?w=668&#038;h=368" alt="" width="668" height="368" align="left" /></a></p>
<ul>
<li>
<ul>
<li>
<ul>
<li><a href="http://sourceforge.net/projects/nhcontrib">http://sourceforge.net/projects/nhcontrib</a></li>
</ul>
</li>
</ul>
</li>
<li>
<h2>Compile time</h2>
<ul>
<li>NHibernate.Expression namespace was renamed to NHibernate.Criterion</li>
<li>IInterceptor have additional methods. (IsUnsaved was renamed IsTransient)</li>
<li>INamingStrategy</li>
<li>IType</li>
<li>IEntityPersister</li>
<li>IVersionType</li>
<li>IBatcher</li>
<li>IUserCollectionType</li>
<li>IEnhancedUserType</li>
<li>IPropertyAccessor</li>
<li>ValueTypeType renamed to PrimitiveType</li>
</ul>
</li>
<li>
<h2>Possible Breaking Changes for external frameworks</h2>
</li>
</ul>
<ul>
<li>Various classes were moved between namespaces</li>
<li>Various classes have been renamed (to match Hibernate 3.2 names)</li>
<li>ISession interface have additional methods</li>
<li>ICacheProvider</li>
<li>ICriterion</li>
<li>CriteriaQueryTranslator</li>
</ul>
<li>
<h2>Initialization time</h2>
</li>
<ul>
<li>&lt;nhibernate&gt; section, in App.config, is no longer supported and will be ignored. Configuration schema for configuration file and App.config is now identical, and the App.config section name is: &lt;hibernate-configuration&gt;</li>
<li>&lt;hibernate-configuration&gt; have a different schema and all properties names are cheked</li>
<li>configuration properties are no longer prefixed by &#8220;hibernate.&#8221;, if before you would specify &#8220;hibernate.dialect&#8221;, now you specify just &#8220;dialect&#8221;</li>
<li>All named queries will be validated at initialization time, an exception will be thrown if any is not valid (can be disabled if needed)</li>
<li>Stricter checks for proxying classes (all public methods must be virtual)</li>
</ul>
<li>
<h2>Run time</h2>
<ul>
<li>SaveOrUpdateCopy() returns a new instance of the entity without changing the original</li>
<li>AutoFlush will not occur outside a transaction &#8211; Database transactions are never optional, all communication with the database must occur inside a transaction, whatever you read or write data.</li>
<li>NHibernate will return long for count(*) queries on SQL Server</li>
<li>&lt;formula&gt; must contain parenthesis when needed</li>
<li>These HQL function names may cause conflict in your HQL reserved names are:
<ul>
<li>substring</li>
<li>locate</li>
<li>trim</li>
<li>length</li>
<li>bit_length</li>
<li>coalesce</li>
<li>nullif</li>
<li>abs</li>
<li>mod</li>
<li>sqrt</li>
<li>upper</li>
<li>lower</li>
<li>cast</li>
<li>extract</li>
<li>concat</li>
<li>current_timestamp</li>
<li>sysdate</li>
<li>second</li>
<li>minute</li>
<li>hour</li>
<li>day</li>
<li>month</li>
<li>year</li>
<li>str</li>
</ul>
</li>
<li>&lt;any&gt; when meta-type=&#8221;class&#8221; the persistent type is a string containing the Class.FullName
<ul>
<li>In order to set a parameter in a query you must use SetParameter(&#8220;paraName&#8221;, typeof(YourClass).FullName, NHibernateUtil.ClassMetaType)</li>
</ul>
</li>
</ul>
</li>
<li>
<h2>Mapping</h2>
</li>
<ul>
<li>&lt;any&gt; : default meta-type is &#8220;string&#8221; (was &#8220;class&#8221;)</li>
</ul>
<div id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:a1ce0c86-dec5-47df-ba81-a24c347edbb9" class="wlWriterSmartContent" style="display:inline;float:none;margin:0;padding:0;">del.icio.us Tags: <a rel="tag" href="http://del.icio.us/popular/NHibernate">NHibernate</a>,<a rel="tag" href="http://del.icio.us/popular/Linq+to+NHibernate">Linq to NHibernate</a>,<a rel="tag" href="http://del.icio.us/popular/Linq">Linq</a>,<a rel="tag" href="http://del.icio.us/popular/ORM">ORM</a>,<a rel="tag" href="http://del.icio.us/popular/C%23+3.0">C# 3.0</a>,<a rel="tag" href="http://del.icio.us/popular/.NET">.NET</a>,<a rel="tag" href="http://del.icio.us/popular/Advanced+.NET">Advanced .NET</a>,<a rel="tag" href="http://del.icio.us/popular/Linq+to+Entities">Linq to Entities</a></div>
<div id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:0941deb9-3263-47de-aa30-cc955dabfc9b" class="wlWriterSmartContent" style="display:inline;float:none;margin:0;padding:0;">Technorati Tags: <a rel="tag" href="http://technorati.com/tags/NHibernate">NHibernate</a>,<a rel="tag" href="http://technorati.com/tags/Linq+to+NHibernate">Linq to NHibernate</a>,<a rel="tag" href="http://technorati.com/tags/Linq">Linq</a>,<a rel="tag" href="http://technorati.com/tags/ORM">ORM</a>,<a rel="tag" href="http://technorati.com/tags/C%23+3.0">C# 3.0</a>,<a rel="tag" href="http://technorati.com/tags/.NET">.NET</a>,<a rel="tag" href="http://technorati.com/tags/Advanced+.NET">Advanced .NET</a>,<a rel="tag" href="http://technorati.com/tags/Linq+to+Entities">Linq to Entities</a></div>
<div id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:e70e71ec-da6c-4189-8c18-67b3923acdf5" class="wlWriterSmartContent" style="display:inline;float:none;margin:0;padding:0;">LiveJournal Tags: <a rel="tag" href="http://www.livejournal.com/interests.bml?int=NHibernate">NHibernate</a>,<a rel="tag" href="http://www.livejournal.com/interests.bml?int=Linq+to+NHibernate">Linq to NHibernate</a>,<a rel="tag" href="http://www.livejournal.com/interests.bml?int=Linq">Linq</a>,<a rel="tag" href="http://www.livejournal.com/interests.bml?int=ORM">ORM</a>,<a rel="tag" href="http://www.livejournal.com/interests.bml?int=C%23+3.0">C# 3.0</a>,<a rel="tag" href="http://www.livejournal.com/interests.bml?int=.NET">.NET</a>,<a rel="tag" href="http://www.livejournal.com/interests.bml?int=Advanced+.NET">Advanced .NET</a>,<a rel="tag" href="http://www.livejournal.com/interests.bml?int=Linq+to+Entities">Linq to Entities</a></div>
<div class="wlWriterHeaderFooter" style="text-align:right;margin:0;padding:4px 0;"><a href="http://digg.com/submit?url=http%3a%2f%2fdcarr.wordpress.com%2f2008%2f08%2f24%2fnhibernate-20-gold-released-must-wait-for-linq-to-nhibernate%2f&amp;title=NHibernate+2.0+gold+Released+%e2%80%93+Must+Wait+for+%e2%80%98Linq+to+NHibernate%e2%80%99"><img style="border:0;" src="http://digg.com/img/badges/100x20-digg-button.png" border="0" alt="Digg This" width="100" height="20" /></a></div>
<p><a href="http://www.stumbleupon.com/submit?url=http://blog.domaindotnet.com/2008/08/24/nhibernate-20-gold-released-must-wait-for-linq-to-nhibernate/%26title%3DNHibernate%2BGold%2BReleased"><img class="alignleft" style="border:0;" src="http://www.stumbleit.com/images/120x20_su_white.gif" border="0" alt="" width="120" height="20" /> Stumble It!</a></p>
<p><a href="https://sourceforge.net/project/showfiles.php?group_id=73818&amp;package_id=73969" target="_blank"><img class="alignleft" style="border:0;" src="http://dcarr.files.wordpress.com/2008/08/techsmithworcfb.png?w=483&#038;h=114" border="0" alt="nhibernate" width="483" height="114" align="right" /></a></p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/dcarr.wordpress.com/762/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/dcarr.wordpress.com/762/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/dcarr.wordpress.com/762/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/dcarr.wordpress.com/762/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/dcarr.wordpress.com/762/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/dcarr.wordpress.com/762/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/dcarr.wordpress.com/762/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/dcarr.wordpress.com/762/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/dcarr.wordpress.com/762/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/dcarr.wordpress.com/762/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/dcarr.wordpress.com/762/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/dcarr.wordpress.com/762/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=team.pushbomb.com&blog=2366446&post=762&subd=dcarr&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://team.pushbomb.com/2008/08/24/nhibernate-20-gold-released-must-wait-for-linq-to-nhibernate/feed/</wfw:commentRss>
		<slash:comments>15</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/7b572cbcda5a17fe984e7dd1ddc9c3d6?s=96&#38;d=&#38;r=PG" medium="image">
			<media:title type="html">pushbomb</media:title>
		</media:content>

		<media:content url="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http%3a%2f%2fblog.domaindotnet.com%2f2008%2f08%2f24%2fnhibernate-20-gold-released-must-wait-for-linq-to-nhibernate%2f" medium="image">
			<media:title type="html">kick it on DotNetKicks.com</media:title>
		</media:content>

		<media:content url="http://dcarr.files.wordpress.com/2008/08/techsmithwor48f.png" medium="image">
			<media:title type="html">NDepend Analysis</media:title>
		</media:content>

		<media:content url="http://dcarr.files.wordpress.com/2008/08/visualndependview1.png?w=400" medium="image" />

		<media:content url="http://dcarr.files.wordpress.com/2008/08/techsmithword00.png" medium="image" />

		<media:content url="http://digg.com/img/badges/100x20-digg-button.png" medium="image">
			<media:title type="html">Digg This</media:title>
		</media:content>

		<media:content url="http://www.stumbleit.com/images/120x20_su_white.gif" medium="image" />

		<media:content url="http://dcarr.files.wordpress.com/2008/08/techsmithworcfb.png" medium="image">
			<media:title type="html">nhibernate</media:title>
		</media:content>
	</item>
		<item>
		<title>NHIbernate 2.0 Goes Beta 1 after Microsoft &#8216;Linq to Entities&#8217; receives &#8216;vote of no confidence&#8217;</title>
		<link>http://team.pushbomb.com/2008/06/29/nhibernate-20-goes-beta-1-while-microsoft-linq-to-entities-receives-vote-of-no-confidence-from-many-leading-net-experts-as-unacceptable/</link>
		<comments>http://team.pushbomb.com/2008/06/29/nhibernate-20-goes-beta-1-while-microsoft-linq-to-entities-receives-vote-of-no-confidence-from-many-leading-net-experts-as-unacceptable/#comments</comments>
		<pubDate>Mon, 30 Jun 2008 04:48:00 +0000</pubDate>
		<dc:creator>Damon Wilder Carr</dc:creator>
				<category><![CDATA[ORM]]></category>
		<category><![CDATA[Software Futures]]></category>
		<category><![CDATA[nhibernate]]></category>
		<category><![CDATA[C# 3.0 Enhancements]]></category>
		<category><![CDATA[Castle]]></category>
		<category><![CDATA[Entity Framework]]></category>
		<category><![CDATA[Expert ORM Opinion]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[NHibernate Beta 1]]></category>

		<guid isPermaLink="false">http://dcarr.wordpress.com/2008/06/29/nhibernate-20-goes-beta-1-while-microsoft-linq-to-entities-receives-vote-of-no-confidence-from-many-leading-net-experts-as-unacceptable/</guid>
		<description><![CDATA[The first official beta for NHibernate 2.0 was released today.  After the recent initiative against  Microsoft ‘Linq to Entities’ in the form of a web-driven petition for a 'vote of no confidence’, the highly anticipated successor to the well-established NHibernate 1.2. We have been working with 2.0.X since the first alpha, and following the progress of the trunk. In our opinion this beta has the high quality of prior betas and we recommend it for non-critical systems immediately as your risk policy allows. We’re working on a more detailed analysis coming soon on some of the key improvements.<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=team.pushbomb.com&blog=2366446&post=376&subd=dcarr&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<blockquote><p><strong>NOTE: NHibernate 2.0 GOLD is released. This post is outdated. <a title="NHibernate 2.0 Released" href="http://blog.domaindotnet.com/2008/08/24/nhibernate-20-gold-released-must-wait-for-linq-to-nhibernate/" target="_self">Click here for the info.</a></strong></p></blockquote>
<p><a href="http://sourceforge.net/project/platformdownload.php?group_id=73818"><img class="alignright" style="border-width:0;margin:5px;" src="http://dcarr.files.wordpress.com/2008/06/nhibernate.png?w=201&#038;h=52" border="0" alt="nhibernate" width="201" height="52" align="right" /></a></p>
<p><span style="font-size:medium;color:#ffffff;">The first official beta for NHibernate 2.0 was recently released<br />
</span></p>
<p><strong><a href="http://sourceforge.net/project/showfiles.php?group_id=73818&amp;package_id=73969&amp;release_id=610227">Click here to download the package</a>.</strong></p>
<p>This comes on the heels of the damaging <a href="http://efvote.wufoo.com/forms/ado-net-entity-framework-vote-of-no-confidence/">‘boycott’</a> of the <a rel="tag" href="http://code.msdn.microsoft.com" target="_blank">Microsoft</a> ‘Linq to Entities’ upcoming release, which was anticipated to be a serious competitor to NHibernate.</p>
<p><a href="http://efvote.wufoo.com/forms/ado-net-entity-framework-vote-of-no-confidence/">Click here to view the on-line petition</a></p>
<p><a href="http://efvote.wufoo.com/reports/entity-framework-vote-of-no-confidence-signatories/#public">Click here to view the signers of the petition</a></p>
<p><a href="http://sourceforge.net/projects/nhcontrib"></a></p>
<table border="1" cellspacing="5" cellpadding="5" width="497">
<tbody>
<tr>
<td width="485" valign="top">
<h2>LAST MINUTE UPDATE FROM THE NHIBERNATE TEAM</h2>
<p>There has been a change in how NHibernate is packaged as the core and contrib aspects now have dedicated locations.</p>
<p>Since NHibernate 2.0 Alpha 1, <strong>ONLY THE CORE</strong> of the project is included at the link above. The <a href="http://sourceforge.net/projects/nhcontrib">Contrib Projects</a> are now in a dedicated location:</p>
<p><a href="http://sourceforge.net/projects/nhcontrib">http://sourceforge.net/projects/nhcontrib</a></p>
<p align="left">There are a few new projects that are essential to investigate for your needs (for example the <a href="http://nhcontrib.wiki.sourceforge.net/BurrowHome">Burrow project</a>). Also be sure to visit the wiki for these significant projects:</p>
<p><a href="http://nhcontrib.wiki.sourceforge.net">http://nhcontrib.wiki.sourceforge.net</a></p>
<p><strong>See the end of this post for a partial list of these contrib efforts.</strong></td>
</tr>
</tbody>
</table>
<p>The team at <a href="http://damon.agilefactor.com/">domain.dot.net</a> has been working with 2.0.X since the first alpha, and following the progress of the trunk. In our opinion this beta has the high quality of prior betas and we recommend it for non-critical systems immediately as your risk policy allows. We’re working on a more detailed analysis coming soon on some of the key improvements.</p>
<p>To download the code direct from the trunk use this SVN URL:</p>
<p><tt><a href="http://nhibernate.svn.sourceforge.net/viewvc/nhibernate/">https://nhibernate.svn.sourceforge.net/svnroot/nhibernate</a></tt></p>
<p>This is no minor update, as with this release they will align with the widely used and praised <a href="http://www.hibernate.org/344.html">‘Hibernate 3.2’ for Java</a>. Here is a listing of the planned new features which are represented to varying degrees of complexness in this beta:</p>
<h2>NHibernate 2.0.0</h2>
<h3>The upcoming NHibernate 2.0 release will add support for many more exciting features; some are ported from Hibernate 3.x, others are features unique to NHibernate.</h3>
<p><a name="A15"></a></p>
<h4>Core</h4>
<ol>
<li>Updated Interceptor functionalities to match those in Hibernate 3.2</li>
<li>Support for SessionFactory events and listeners</li>
<li>CriteriaTransformer allows one to clone and transform ICriteria</li>
<li>Support for MultiCriteria; similar to MultiQuery implemented in NH1.2</li>
<li>Support for the &lt;join&gt; element. It enables table-per-subclass mapping using a discriminator, or mapping a single entity from more than one tables</li>
<li>StatelessSession provides an easier way to work with bulk operations</li>
<li>Support for CacheMode allows one to have better control on how the session interacts with the second-level cache</li>
<li>Implementation of query plan; NHibernate will parse named queries once at start-up time, thus improving performance</li>
<li>Support of native ID generator for &lt;idbag&gt;</li>
<li>Improved and more consistent syntax for configuration</li>
<li>Other internal improvements</li>
</ol>
<p><a name="A16"></a></p>
<h4>Sub-projects</h4>
<ul>
<li>NHibernate.Linq (a LINQ provider for NHibernate)</li>
<li>NHibernate.Statistics</li>
</ul>
<h2>NHibernate key features:</h2>
<ul>
<li><strong>Natural programming model</strong> &#8211; NHibernate supports natural OO idiom; inheritance, polymorphism, composition and the .NET collections framework, including generic collections.</li>
</ul>
<ul>
<li><strong>Native .NET</strong> &#8211; NHibernate API uses .NET conventions and idioms</li>
</ul>
<ul>
<li><strong>Support for fine-grained object models</strong> &#8211; a rich variety of mappings for collections and dependent objects</li>
</ul>
<ul>
<li><strong>No build-time bytecode enhancement</strong> &#8211; there&#8217;s no extra code generation or bytecode processing steps in your build procedure</li>
</ul>
<ul>
<li><strong>The query options</strong> &#8211; NHibernate addresses both sides of the problem; not only how to get objects into the database, but also how to get them out again</li>
</ul>
<ul>
<li><strong>Custom SQL</strong> &#8211; specify the exact SQL that NHibernate should use to persist your objects. Stored procedures are supported on Microsoft SQL Server.</li>
</ul>
<ul>
<li><strong>Support for &#8220;conversations&#8221;</strong> &#8211; NHibernate supports long-lived persistence contexts, detach/reattach of objects, and takes care of optimistic locking automatically</li>
</ul>
<ul>
<li><strong>Free/open source</strong> &#8211; NHibernate is licensed under the LGPL (Lesser GNU Public License)</li>
</ul>
<h2>Partial Listing of Key Contrib Work for NHibernate</h2>
<h3>NHibernate.Burrow</h3>
<blockquote><p>Burrow is a light weight middleware developed to support .Net applications using NHibernate (maybe also referred as NH in this article) as ORM framework.<br />
Using Asp.net with NHibernate could be a challenge because of the fact that NHibernate is a stateful environment while Asp.net is a stateless framework. Burrow can help solve this conflict by providing advanced and smart session/transaction management and other facilitates.</p></blockquote>
<p><strong>Road Map of Burrow Wiki:</strong></p>
<ul>
<li><strong><a href="http://nhcontrib.wiki.sourceforge.net/BurrowIntroduction">Introduction</a> -</strong> a brief introduction of Burrow</li>
<li><strong><a href="http://nhcontrib.wiki.sourceforge.net/BurrowGetStarted">Get Started</a></strong> &#8211; tells how to setup the Burrow framework.</li>
<li><strong><a href="http://nhcontrib.wiki.sourceforge.net/BurrowConversationExplained">Burrow Conversation Explained</a> -</strong> gives more detail about long conversation.</li>
<li><strong><a href="http://nhcontrib.wiki.sourceforge.net/BurrowStatefulFields">StatefulField Attributes</a> -</strong> about very useful Burrow.WebUtil attributes that can simplify states persistence for ASP.NET controls and pages</li>
<li><strong><a href="http://nhcontrib.wiki.sourceforge.net/BurrowFAQ">FAQ</a></strong> &#8211; you know what it is.</li>
</ul>
<p>Other Projects:</p>
<ul>
<li><a href="http://nhcontrib.wiki.sourceforge.net/">Core Wiki – Click Here</a><br />
|</p>
<ul>
<li>NHibernate.Search</li>
<li>NHibernate.Mapping.Attributes</li>
<li>NHibernate.Validator</li>
<li>NHibernate.Shards</li>
<li><a class="wiki_link" href="http://nhcontrib.wiki.sourceforge.net/BurrowHome">NHibernate.Burrow</a></li>
<li>NHibernate.Caches.MemCache</li>
<li>NHibernate.Caches.Prevalence</li>
<li>NHibernate.Caches.SysCache</li>
<li>NHibernate.Caches.SysCache2</li>
<li>NHibernate.JetDriver</li>
<li>NHibernate.Tasks</li>
<li>NHibernate.Tool.hbm2net</li>
<li>NHibernate.UserTypes.Oracle</li>
<li>NHibernate.UserTypes.SqlTypes</li>
<li>&#8230; and others</li>
</ul>
</li>
<li>SBN Trunk is:
<ul>
<li><a title="http://nhcontrib.svn.sourceforge.net/viewvc/nhcontrib/" href="https://nhcontrib.svn.sourceforge.net/svnroot/nhcontrib">http://nhcontrib.svn.sourceforge.net/viewvc/nhcontrib/</a></li>
</ul>
</li>
</ul>
<p align="right"><em>NHIbernate is a project under sponsorship of Red Hat Middleware, LLC.<br />
JBoss and Hibernate are registered trademarks<br />
</em><em>and servicemarks of Red Hat, Inc. All rights reserved. </em></p>
<div id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:df988018-7ec8-49d4-b07f-0a92ff05730d" class="wlWriterSmartContent" style="display:inline;float:none;margin:0;padding:0;">del.icio.us Tags: <a rel="tag" href="http://del.icio.us/popular/NHibernate">NHibernate</a>,<a rel="tag" href="http://del.icio.us/popular/NHibernate+Beta+1">NHibernate Beta 1</a>,<a rel="tag" href="http://del.icio.us/popular/Castle">Castle</a>,<a rel="tag" href="http://del.icio.us/popular/ORM">ORM</a>,<a rel="tag" href="http://del.icio.us/popular/Microsoft">Microsoft</a>,<a rel="tag" href="http://del.icio.us/popular/Entity+Framework">Entity Framework</a>,<a rel="tag" href="http://del.icio.us/popular/Linq">Linq</a>,<a rel="tag" href="http://del.icio.us/popular/Expert+ORM+Opinion">Expert ORM Opinion</a></div>
<div id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:d066c765-fc0d-4819-a527-281c315663b7" class="wlWriterSmartContent" style="display:inline;float:none;margin:0;padding:0;">Technorati Tags: <a rel="tag" href="http://technorati.com/tags/NHibernate">NHibernate</a>,<a rel="tag" href="http://technorati.com/tags/NHibernate+Beta+1">NHibernate Beta 1</a>,<a rel="tag" href="http://technorati.com/tags/Castle">Castle</a>,<a rel="tag" href="http://technorati.com/tags/ORM">ORM</a>,<a rel="tag" href="http://technorati.com/tags/Microsoft">Microsoft</a>,<a rel="tag" href="http://technorati.com/tags/Entity+Framework">Entity Framework</a>,<a rel="tag" href="http://technorati.com/tags/Linq">Linq</a>,<a rel="tag" href="http://technorati.com/tags/Expert+ORM+Opinion">Expert ORM Opinion</a></div>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/dcarr.wordpress.com/376/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/dcarr.wordpress.com/376/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/dcarr.wordpress.com/376/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/dcarr.wordpress.com/376/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/dcarr.wordpress.com/376/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/dcarr.wordpress.com/376/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/dcarr.wordpress.com/376/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/dcarr.wordpress.com/376/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/dcarr.wordpress.com/376/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/dcarr.wordpress.com/376/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/dcarr.wordpress.com/376/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/dcarr.wordpress.com/376/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=team.pushbomb.com&blog=2366446&post=376&subd=dcarr&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://team.pushbomb.com/2008/06/29/nhibernate-20-goes-beta-1-while-microsoft-linq-to-entities-receives-vote-of-no-confidence-from-many-leading-net-experts-as-unacceptable/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/7b572cbcda5a17fe984e7dd1ddc9c3d6?s=96&#38;d=&#38;r=PG" medium="image">
			<media:title type="html">pushbomb</media:title>
		</media:content>

		<media:content url="http://dcarr.files.wordpress.com/2008/06/nhibernate.png" medium="image">
			<media:title type="html">nhibernate</media:title>
		</media:content>
	</item>
		<item>
		<title>Framework API Development Best Practices using C# 3.0</title>
		<link>http://team.pushbomb.com/2008/05/15/domain-driven-framework-development-c-net-35-extension-methods-lambada-empowerment/</link>
		<comments>http://team.pushbomb.com/2008/05/15/domain-driven-framework-development-c-net-35-extension-methods-lambada-empowerment/#comments</comments>
		<pubDate>Thu, 15 May 2008 21:24:52 +0000</pubDate>
		<dc:creator>Damon Wilder Carr</dc:creator>
				<category><![CDATA[C# 3.0 Enhancements]]></category>
		<category><![CDATA[C# 3.0 for Internal DSL]]></category>
		<category><![CDATA[ORM]]></category>
		<category><![CDATA[Software Design]]></category>
		<category><![CDATA[Software Factories]]></category>
		<category><![CDATA[Software Futures]]></category>
		<category><![CDATA[agile practices]]></category>
		<category><![CDATA[resharper]]></category>
		<category><![CDATA[.NET 3.5]]></category>
		<category><![CDATA[API Design]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Extension Methods]]></category>
		<category><![CDATA[Framework Design]]></category>
		<category><![CDATA[Generics]]></category>
		<category><![CDATA[Lambada]]></category>

		<guid isPermaLink="false">http://dcarr.wordpress.com/2008/05/15/domain-driven-framework-development-c-net-35-extension-methods-lambada-empowerment/</guid>
		<description><![CDATA[This content assumes you understand the basics of the new C# 3.0 language features in .NET 3.5. I use a 'pretend pair programming' approach with continued refactoring as this is how I would discuss it if you were coding with me.

I'll start with a fairly trivial, yet important example (I use it every day). Many times when comparing Strings I want to ignore case and culture (the InvariantCulture). This is provided by an overload as such as you likely know:<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=team.pushbomb.com&blog=2366446&post=188&subd=dcarr&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<h2 style="text-align:left;">PART 1</h2>
<p style="text-align:left;"><a href="http://dcarr.files.wordpress.com/2008/05/image31.png"><img class="alignright" style="border-width:0;margin:5px;" src="http://dcarr.files.wordpress.com/2008/05/image3-thumb.png?w=1024&#038;h=220" alt="image" height="220" /></a></p>
<p style="text-align:left;">This content assumes you have an introductory knowledge of C# 3.0 language features in .NET 3.5 and mastery of legacy C# 2.0 Generics, Generic Type Constraints, Anonymous Delegates and related material.</p>
<p>I use a &#8216;pair programming&#8217; approach with continued refactoring as this is how I would discuss it if you were coding with me, with an unfortunate one-way delivery.</p>
<h3 style="text-align:left;">The Brief Strategic View</h3>
<p style="text-align:left;">Microsoft has slowly been moving C# in a very productive direction (this is not new, as these features existed in 2.0 although not nearly as well integrated) to provide &#8216;Functional Language&#8217; features. If you don&#8217;t know or care about language semantics, just know that Linq and especially Lambada Expressions are about empowering you to use executable code like a variable, aka to leverage the power of functional programming. For more on this, read this <a href="http://msdn.microsoft.com/en-us/magazine/cc507636.aspx">MSDN article</a> by <a href="http://msdn.microsoft.com/en-us/magazine/cc301175.aspx">Joel Pobar (former CLR Team)</a> or read the next set of posts (part 2 onward) as I will go into the depths of this.</p>
<table style="text-align:left;height:153px;" border="1" cellspacing="0" cellpadding="2" width="399">
<tbody>
<tr>
<td width="543" valign="top">
<p align="center">I think of Lambadas as an incredibly focused and powerful domain specific language for delegates.</p>
<p>In this sense they are quite similar to Regular Expressions in that they are really good at their focus area.</p>
<p align="center">What do I mean by good?</p>
<ul>
<li>
<div>Terse yet Understandable / Maintainable</div>
</li>
<li>
<div>Syntax tailored to the need, not the other way around.</div>
</li>
<li>
<div>Highly effective for problems that are orders of magnitude more difficult without them (a simple 10% improvement would not cut it)</div>
</li>
</ul>
</td>
</tr>
</tbody>
</table>
<h2 style="text-align:left;">Painless Intro</h2>
<p style="text-align:left;">I&#8217;ll start with a fairly trivial, yet important example (I use it every day). Many times when comparing Strings I want to ignore case and culture (the InvariantCulture). This is provided by an overload as such as you likely know:</p>
<p>[Test,Category("BaselineCore")]<br />
public void shouldAsserStringCloneInvokeEqual() {</p>
<p>var baselineString = &#8220;This is a TEST CASE to IgnOrE Casing&#8221;;</p>
<p>var stringUpper = baselineString.ToUpperInvariant();</p>
<p>Assert.IsTrue(baselineString.Equals(stringUpper,<br />
StringComparison.InvariantCultureIgnoreCase));</p>
<p style="text-align:left;">The test results are shown above. Pass. Ok so I really like short, concise code that is understandable at a glance. Also it&#8217;s a pain to always (even with ReSharper) use this (and I have seen people use RegEx for this! RegEx is awesome but overkill for this issue).</p>
<p style="text-align:left;">Refactoring</p>
<ul style="text-align:left;">
<li>Create an extension method on String</li>
<li>Decide on a good name for the method (this is SO important and for most an afterthought!)</li>
</ul>
<p style="text-align:left;">I&#8217;ve settled on calling this new method on String &#8216;EqualsCore&#8217; as that is what we are doing, making the conditions for a match &#8217;simpler&#8217; and seeing &#8216;just the core values&#8217; are the same (anyway it makes sense to me)., I suppose this could be &#8216;EqualsRelaxed&#8217; or whatever..</p>
<p style="text-align:left;">Here is the test case (no code yet):</p>
<p>[Test, Category("BaselineCore")]<br />
public void shouldAsserStringsEqualUsingExtension() {<br />
var baselineString = &#8220;This is a TEST CASE to IgnOrE Casing&#8221;;<br />
Assert.IsTrue(baselineString. EqualsSimple(baselineString.ToUpperInvariant())); }</p>
<p style="text-align:left;">Now we write the code. Here is the container for the extension method:</p>
<p>public static class StringExtensions {</p>
<p>public static bool EqualsSimple(this string sTarget, string compare) {</p>
<p>return sTarget.Equals(compare, StringComparison.InvariantCultureIgnoreCase); }</p>
<p>}</p>
<p style="text-align:left;">Indeed they both pass:</p>
<p style="text-align:left;"><a href="http://dcarr.files.wordpress.com/2008/05/image25.png"><img class="alignright" style="float:right;border-width:0;" src="http://dcarr.files.wordpress.com/2008/05/image25-thumb.png?w=455&#038;h=255" alt="image25" width="455" height="255" align="left" /></a></p>
<p style="text-align:left;">
<p style="text-align:left;">
<p style="text-align:left;">
<p style="text-align:left;">
<p style="text-align:left;">
<p style="text-align:left;">Since every type inherits from Object, and Equals is defined on Object, all instances should support this approach, and I could be early bound by using Generics&#8230;. Hmm&#8230;</p>
<p style="text-align:left;">I tried this (note: I gave it a new new &#8216;EqualsThis&#8217; to separate them.</p>
<p>public static bool EqualsThis&lt;TTarget&gt;(this TTarget sTarget, TTarget compare){</p>
<p>return sTarget.Equals(compare);</p>
<p>}</p>
<p style="text-align:left;">Functionally not that interesting at all, but a test. So I typed in the following and wow&#8230; It works from Intellisense&#8217;s view&#8230; Ok it compiled! Wait&#8230;..FAIL! But why:?</p>
<p style="text-align:left;">OK here is the new test:</p>
<p>[Test, Category("BaselineCore")]</p>
<p>public void shouldAsserANYTHINGEqualUsingExtension() {</p>
<p>const String baselineString =&#8221;This is a TEST CASE to IgnOrE Casing&#8221;;</p>
<p>var sb = new StringBuilder(baselineString);</p>
<p>Assert.IsTrue(sb.EqualsThis(new StringBuilder(sb.ToString())));</p>
<p>}</p>
<p style="text-align:left;">
<p style="text-align:left;">Interesting&#8230;</p>
<p style="text-align:left;">Here is the documentation for what Equals means by default from Microsoft:</p>
<table style="text-align:left;" border="1" cellspacing="0" cellpadding="2" width="396">
<tbody>
<tr>
<td width="394" valign="top">
<p align="center">Returns: true if objA is the same instance as objB or if both are null references or if objA.Equals(objB) returns true; otherwise, false.</p>
</td>
</tr>
</tbody>
</table>
<p style="text-align:left;">So our code fails using the extension yet this returns true:</p>
<p>[Test] public void shouldAssertStringBuilderExplicit() {</p>
<p>const String baselineString = &#8220;This is a TEST CASE to IgnOrE Casing&#8221;;</p>
<p>var sb = new StringBuilder(baselineString);</p>
<p>var sb2 = new StringBuilder(baselineString); Assert.IsTrue(sb.Equals(sb2));</p>
<p>}</p>
<p style="text-align:left;">So Reflector to the rescue once again. I could see in Reflector what I believed the issue was. Indeed the StringBuilder class has an overloaded Equals, and even making the extension method cast to the generic type directly was a no go.</p>
<table style="text-align:left;" border="1" cellspacing="0" cellpadding="2" width="400">
<tbody>
<tr>
<td width="400" valign="top">
<p align="center">So what do you think? Why would this compile fine with absolutely no problems (and that is correct it turns out), but FAIL at runtime on the assertion when the same line above passes? Skip ahead and reply with the answer if you know it&#8230;.</p>
</td>
</tr>
</tbody>
</table>
<p style="text-align:left;">This exposes one of the dangers that we must be incredibly careful with. It has always been poor design in my opinion to encourage developers to override common methods such as ToString() and Equals(object X) with their own behaviors as you force consumers of the API to understand IMPLEMENTATION. You cannot ensure your OK simply from a contract. This is known to be evil&#8230;.</p>
<p style="text-align:left;">Of course this is a legacy style and will be slowly phased out.</p>
<p style="text-align:left;">Spin up reflector and look at the code for the OVERLOAD that StringBuilder has:</p>
<div style="text-align:left;">public bool Equals(StringBuilder sb){if (sb == null) return false;</p>
<p>return (((this.Capacity == sb.Capacity) &amp;&amp; (this.MaxCapacity == sb.MaxCapacity))<br />
&amp;&amp;<br />
this.m_StringValue.Equals((string) sb.m_StringValue));</p>
<p>}</p></div>
<div style="text-align:left;">
<p style="text-align:left;">Of course! How else could a StringBuilder claim to be &#8216;Equal&#8217; to another&#8230; In fact it is perfectly reasonable but again shows the danger of late binding, making assumptions about how any &#8216;object&#8217; type will perform.</p>
</div>
<div style="text-align:left;">
<p style="text-align:left;">So there was no real way for our extension to call the &#8216;correct&#8217; equals. It called the base definition given above which is obvious now why it failed.</p>
<p style="text-align:left;">
<p style="text-align:left;">So how do we fix this for the general case?</p>
<div style="text-align:left;">
<p style="text-align:left;">Here is the test case which I got working.. If your not familiar with this style of code,</p>
</div>
<div style="text-align:left;">This is the foundation we build layer after layer on and illustrates the core of this post.</div>
<p>[Test] public void shouldAsserANYTHINGEqualUsingExtension() {</p>
<p>const String baselineString = &#8220;This is a TEST CASE to IgnOrE Casing&#8221;;</p>
<p>var sb = new StringBuilder(baselineString);</p>
<p>var sb2 = new StringBuilder(baselineString);</p>
<p>Assert.IsTrue(sb.EqualsThis(x =&gt; x.Equals(sb2)));</p>
<p>}</p>
<table style="text-align:left;" border="1" cellspacing="0" cellpadding="2" width="438">
<tbody>
<tr>
<td width="436" valign="top">
<p align="center">Lambadas are like an incredibly focused and powerful domain specific language for delegates. In this sense they are quite similar to Regular Expressions in that they are really good (and to quantify good, I mean clear yet precise, not overly verbose yet highly effective for problems that are more difficult without them).</p>
</td>
</tr>
</tbody>
</table>
<div style="text-align:left;">So what about the implementation? Here it is:</div>
<p>public static bool EqualsThis&lt;TTarget&gt;(this TTarget sTarget,</p>
<p>Predicate&lt;TTarget&gt; EqualsDelegate) {</p>
<p>return EqualsDelegate.Invoke(sTarget);</p>
<p>}</p>
<div style="text-align:left;">It&#8217;s all about Expressions! Think of them as varied ways to receive executable code that you can &#8216;invoke&#8217; literally, that must meet the contract you define.</div>
<div style="text-align:left;">This is so basic after we cover what the really useful applications are. However remember this has nothing to do with the examples, only the concepts they represent.</div>
<h1 style="text-align:left;"></h1>
<table style="text-align:left;" border="1" cellspacing="0" cellpadding="2" width="632">
<tbody>
<tr>
<td width="400" valign="top">
<div></div>
<ol>
<li>Combine Generics and Generic Constraints to your Extension Methods but BE CAREFUL and ensure you are covered by unit tests</li>
<li>Try to always think a level of abstraction above where your immediate need is to see if your solution indeed has wider and perhaps far more valuable contribution.</li>
<li>Hide complexity behind your Framework API, and focus on crafting work that others will easily consume.</li>
</ol>
</td>
</tr>
</tbody>
</table>
</div>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/dcarr.wordpress.com/188/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/dcarr.wordpress.com/188/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/dcarr.wordpress.com/188/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/dcarr.wordpress.com/188/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/dcarr.wordpress.com/188/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/dcarr.wordpress.com/188/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/dcarr.wordpress.com/188/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/dcarr.wordpress.com/188/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/dcarr.wordpress.com/188/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/dcarr.wordpress.com/188/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/dcarr.wordpress.com/188/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/dcarr.wordpress.com/188/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=team.pushbomb.com&blog=2366446&post=188&subd=dcarr&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://team.pushbomb.com/2008/05/15/domain-driven-framework-development-c-net-35-extension-methods-lambada-empowerment/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/7b572cbcda5a17fe984e7dd1ddc9c3d6?s=96&#38;d=&#38;r=PG" medium="image">
			<media:title type="html">pushbomb</media:title>
		</media:content>

		<media:content url="http://dcarr.files.wordpress.com/2008/05/image3-thumb.png" medium="image">
			<media:title type="html">image</media:title>
		</media:content>

		<media:content url="http://dcarr.files.wordpress.com/2008/05/image25-thumb.png" medium="image">
			<media:title type="html">image25</media:title>
		</media:content>
	</item>
		<item>
		<title>NHibernate Custom Collections Supporting Lazy Loading with IPersistentCollection &amp; DomainPersistentGenericBag</title>
		<link>http://team.pushbomb.com/2007/11/07/nhibernate-custom-collections/</link>
		<comments>http://team.pushbomb.com/2007/11/07/nhibernate-custom-collections/#comments</comments>
		<pubDate>Wed, 07 Nov 2007 05:44:00 +0000</pubDate>
		<dc:creator>Damon Wilder Carr</dc:creator>
				<category><![CDATA[ORM]]></category>
		<category><![CDATA[Software Design]]></category>
		<category><![CDATA[Software Factories]]></category>
		<category><![CDATA[nhibernate]]></category>
		<category><![CDATA[resharper]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[ActiveRecord]]></category>
		<category><![CDATA[agile practices]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[C# 3.0 Enhancements]]></category>
		<category><![CDATA[Collections]]></category>

		<guid isPermaLink="false">http://dcarr.wordpress.com/2007/07/23/nhibernate-custom-collections-supporting-lazy-loading-with-ipersistentcollection-domainpersistentgenericbag/</guid>
		<description><![CDATA[In NHibernate, to write a custom persistable collection you must inherit from PersistentGenericBag which has no empty constructors (therefore you cannot use this to inherit on your main collection (!) as you MUST have an empty constructor for NHibernate to use it). FUN!
When you inherit from the concrete List as well as IUserCollectionType and (after finally getting it to work perhaps) wonder why they get casting exceptions when using a lazy loaded collection (the default now with 1.2.0) it is more then a pain....<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=team.pushbomb.com&blog=2366446&post=83&subd=dcarr&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<p style="text-align:center;"><span style="color:#ff0000;"><strong>NOTE: This is now being updated to cover NHibernate 2.0.0.X so please check back if interested in new approaches to this. The previous solution posted is now outdated and I do not recommend using it.</strong></span></p>
<p style="text-align:center;"><strong></strong></p>
<p style="text-align:center;">I will soon be posting a new article which (in my opinion) could be far more useful to every<a href="http://dcarr.files.wordpress.com/2008/04/chart.png"><img class="alignright size-medium wp-image-165" style="float:right;border-width:0;margin:5px;" src="http://dcarr.files.wordpress.com/2008/04/chart.png?w=256" alt="" height="212" /></a>one then this article ever was as it:</p>
<ul>
<li>Has far greater scope and use as Is a &#8216;domain collection&#8217; engine and I believe the first solution to something I have been struggling with for years: The pain of building clean, quick web views in the world of Ajax, controls that expect datasets, and programmers not understanding ORM. It so far works with <a href="http://www.codeproject.com/KB/architecture/NHibernateBestPractices.aspx">NHIbernate </a>(and <a href="http://using.castleproject.org/display/AR/An+introduction">ActiveRecord</a>) and I am finalizing Linq to Entity support</li>
<li>Leverages advanced .NET intrinsic&#8217;s (CustomTypeDescriptors, etc&#8230;) that are leveraged by the third-part component community</li>
<li>
<p style="text-align:left;">Support any &#8216;domain projection/entity set&#8217; operation &#8211; the same engine backs both bindable sets and non-bindable sets.. You just pass the HQL into the user control in VS 2005/2008</p>
</li>
</ul>
<p style="text-align:center;">
<p><span id="more-83"></span><strong></strong>Also stop by the new global repository I am bringing up with some others around &#8216;best practices&#8217; for domain driven (obsessed) work. This has a .NET 3.5 focus (as we will deeply discuss linq I am planning) however it is an architects site, so we will cover mono, java, and likely 50% of the content will be platform agnostic.More to come!</p>
<div style="text-align:center;"><span style="color:#666699;"></p>
<div style="text-align:center;"><strong></strong></div>
<p></span></div>
<p style="text-align:center;">
<div><span style="color:#666699;"></p>
<div style="text-align:center;"><strong><span style="color:#0000ff;">UPDATE: Billy McCafferty has done a fantastic job picking up where I barely get started.</span></strong></div>
<p><strong></strong></p>
<p></span></p>
<div><span style="color:#666699;"><strong><span style="color:#0000ff;"></p>
<div style="text-align:center;"><a href="http://devlicio.us/blogs/billy_mccafferty/archive/2007/12/03/custom-collections-with-nhibernate-part-i-the-basics.aspx">Go here for the must read posts.</a></div>
<div style="text-align:center;"> </div>
<div style="text-align:center;"> </div>
<p><font color="#666699"><strong><font color="#0000ff"> </p>
<p></font></strong></font></span> </p>
<p></strong></span><strong></strong></p>
</div>
</div>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/dcarr.wordpress.com/83/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/dcarr.wordpress.com/83/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/dcarr.wordpress.com/83/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/dcarr.wordpress.com/83/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/dcarr.wordpress.com/83/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/dcarr.wordpress.com/83/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/dcarr.wordpress.com/83/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/dcarr.wordpress.com/83/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/dcarr.wordpress.com/83/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/dcarr.wordpress.com/83/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/dcarr.wordpress.com/83/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/dcarr.wordpress.com/83/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=team.pushbomb.com&blog=2366446&post=83&subd=dcarr&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://team.pushbomb.com/2007/11/07/nhibernate-custom-collections/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/7b572cbcda5a17fe984e7dd1ddc9c3d6?s=96&#38;d=&#38;r=PG" medium="image">
			<media:title type="html">pushbomb</media:title>
		</media:content>

		<media:content url="http://dcarr.files.wordpress.com/2008/04/chart.png?w=256" medium="image" />
	</item>
		<item>
		<title>Object/Relational Tools &#8211; NHibernate and Microsoft ADO.NET Entity Framework</title>
		<link>http://team.pushbomb.com/2006/09/09/objectrelational-tools-nhibernate-and-microsoft-adonet-entity-framework/</link>
		<comments>http://team.pushbomb.com/2006/09/09/objectrelational-tools-nhibernate-and-microsoft-adonet-entity-framework/#comments</comments>
		<pubDate>Sat, 09 Sep 2006 20:48:00 +0000</pubDate>
		<dc:creator>Damon Wilder Carr</dc:creator>
				<category><![CDATA[ORM]]></category>
		<category><![CDATA[Software Design]]></category>
		<category><![CDATA[Software Factories]]></category>
		<category><![CDATA[Software Futures]]></category>
		<category><![CDATA[nhibernate]]></category>
		<category><![CDATA[Domain.Driven.NET]]></category>
		<category><![CDATA[dsl]]></category>

		<guid isPermaLink="false">http://dcarr.wordpress.com/2006/09/09/objectrelational-tools-nhibernate-and-microsoft-adonet-entity-framework/</guid>
		<description><![CDATA[Updated 6/26/2008
Microsoft had executed so well with Linq but to counter that, it&#8217;s now apparent EVEN WITHIN MICROSOFT that what will be shipped in the only &#8216;real ORM&#8217; sense they might offer will fundamentally be a non-starter (at least as the people who care about ORM are concerned).
Even Microsoft key staff agree. I was shocked [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=team.pushbomb.com&blog=2366446&post=71&subd=dcarr&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<p>Updated 6/26/2008</p>
<p><strong>Microsoft had executed so well with Linq but to counter that, it&#8217;s now apparent EVEN WITHIN MICROSOFT that what will be shipped in the only &#8216;real ORM&#8217; sense they might offer will fundamentally be a non-starter (at least as the people who care about ORM are concerned).</strong></p>
<p>Even Microsoft key staff agree. I was shocked to see this:</p>
<p><a href="http://efvote.wufoo.com/forms/ado-net-entity-framework-vote-of-no-confidence/">ADO .NET Entity Framework Vote of No Confidence</a></p>
<blockquote><p>The signatories of this letter are unanimous in expressing concern for the welfare of software projects undertaken in the Microsoft customer community that will make use of the forthcoming ADO .NET Entity Framework.<br />
Over the past year, Microsoft and the Entity Framework team have received a tremendous amount of feedback from experts in entity-based applications and software architectures on the .NET platform. While Microsoft’s announcement of its intention to provide framework support for entity architectures was received with enthusiasm, the Entity Framework itself has consistently proved to be cause for significant concern.</p></blockquote>
<p>And they are right on the money. There is no point is doing things well from a design perspective with ORM using the entity framework as is would counteract any benefit.</p>
<p>I hoped we could have a valid alternative as that could only benefit all of us, but we will not, at least for version 1.0</p>
<p>Long story short?</p>
<table style="height:43px;" border="1" cellspacing="0" cellpadding="2" width="414">
<tbody>
<tr>
<td width="667" valign="top">
<p align="center">We recommend the adoption of NHIbernate (you decide the version according to risk tolerance) with a strong recommendation to leverage the Linq provider. There is no other logical choice at this time we firmly believe. This will likely change however as Microsoft has shown they learn and adopt and (eventually) can get things right.</p>
</td>
</tr>
</tbody>
</table>
<p>To do quality &#8216;large scale enterprise&#8217; software of the type say the Java community for example has been delivering, the use of the Entity Framework would  harm your ability to adapt to change to the point of near uselessness.,</p>
<p>That being said here is my information set of links:</p>
<h3><a href="http://www.hibernate.org/343.html">NHibernate &#8211; Release Version 1.2.1 GA</a></h3>
<p><a href="http://www.castleproject.org/activerecord/index.html">with optional Castle ActiveRecord &#8211; RC3</a> (stable and OK for production use in my opinion &#8211; wrapper on NHibernate)</p>
<p><a href="http://sourceforge.net/projects/nhibernate/"><br />
</a></p>
<p><a href="http://sourceforge.net/projects/nhibernate/"> </a><a href="http://sourceforge.net/projects/nhibernate/">NHibernate &#8211; Pre Release 2.0.X</a></p>
<p><a href="http://nhibernate.svn.sourceforge.net/viewvc/nhibernate/">SVN Trunk is</a>: https://nhibernate.svn.sourceforge.net/svnroot/nhibernate</p>
<p><a href="http://www.castleproject.org/activerecord/documentation/trunk/index.html">Castle ActiveRecord Trunk </a>(evolving with NHIbernate 2.0.X)</p>
<h3><a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=15DB9989-1621-444D-9B18-D1A04A21B519&amp;displaylang=en">Microsoft Linq to Entities &#8211; Pre Release</a></h3>
<p>Make sure you understand what Linq is and is not. For example, here is one Microsoft clarification:</p>
<ol>
<table border="1" cellspacing="0" cellpadding="2" width="612">
<tbody>
<tr>
<td width="610" valign="top">
<li>
<div>Linq to SQL, released with the Visual Studio 2008, is designed to provide strongly-typed LINQ access for rapidly developed applications across the Microsoft SQL Server family of databases.</div>
</li>
<li>
<div>Linq to Entities, to be released in an update to Visual Studio 2008 in the first half of 2008, is designed to provide strongly-typed LINQ access for applications requiring a more flexible Object Relational mapping, across Microsoft SQL Server and third-party databases.Here I only discuss Linq to Entities</div>
</li>
</td>
</tr>
</tbody>
</table>
</ol>
<p>In 4/5 options NHIbernate is involved, however I LOVE LINQ and it would be fantastic if today we had a way to FULLY leverage it (we can use it to enumerate data as a full set of course). There is a very compelling effort to provide Linq to NHibernate which I have reviewed extensively, and this just provides more incentive to use a pre-release NHIbernate (not sure if it works on 1.2, will check however).</p>
<p>So the decision is further refined to:</p>
<h1>Decision Point: How will you leverage Linq?</h1>
<h2>Use Linq &#8216;persistence optimized&#8217; expressions</h2>
<p align="right">
<p>Linq to Entities &#8211; Pre Release using a Provider for your DB</p>
<p>NHIbernate Combined with <a href="http://www.ayende.com/Blog/archive/2007/03/17/Implementing-Linq-for-NHibernate-A-How-To-Guide--Part.aspx">Evolving Linq to NHIbernate Provider</a></p>
<li>Check <a href="http://ayende.com/Blog/archive/2007/03/16/Linq-for-NHibernate.aspx">this Linq (no pun intended) for this exciting work.</a></li>
<li>If you prefer not to build anything try: <a href="http://www.ayende.com/projects/scratch-pad.aspx">here</a></li>
<h2>Linq as Linq to Objects / Non-intelligent provider</h2>
<h1>Linq to Entities</h1>
<p>This is a big unknown for now. Sure Linq is fantastic but this is completely a new area for Microsoft and don&#8217;t make the common mistake of thinking Linq = ORM. THEY ARE TOTALLY DIFFERENT however Linq is a nice platform to build ORM on top of (as stated people have done).</p>
<li><a href="http://msdn.microsoft.com/en-us/data/aa937723.aspx">http://msdn.microsoft.com/en-us/data/aa937723.asp</a>You can download <a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=15DB9989-1621-444D-9B18-D1A04A21B519&amp;displaylang=en">beta 3 here</a>Team Blog is here: <a href="http://blogs.msdn.com/adonet/archive/tags/Entity+Framework/default.aspx">http://blogs.msdn.com/adonet/archive/tags/Entity+Framework/default.aspx</a>Hibernate is the default choice and is proven in hundreds (if not thousands) of very large production systems in both Java and the .NET world.
<p>Microsoft holds the Linq card however as that is likely the future of .NET development in many ways..</p>
<h1>NHibernate</h1>
</li>
<li>The easy winner for now as not only is safety there by exposing the code, it is PROVEN. I am so amazed by the ill-advised companies that create &#8216;no open source&#8217; policies&#8230; DUH! The alternative is better for you?! You&#8217;d rather:1) Place an arbitrary constraint on your ability to innovate and operate effectively in software2) Execute in a manner that today is proven to be characterized as more expensive, of lower quality, with higher risk, etc. etc. simply because it is not a locked down proprietary offering??!!Learn more about NHIbernate? <a href="http://www.codeproject.com/KB/architecture/NHibernateBestPractices.aspx">START HERE.</a>
<ul>
<li>DOWNLOAD:
<ul>
<li><a href="http://www.hibernate.org/343.html">http://www.hibernate.org/343.html</a></li>
</ul>
</li>
<li>Quick Starts:
<ul>
<li><a href="http://www.hibernate.org/362.html">http://www.hibernate.org/362.html</a></li>
</ul>
</li>
<li>Great Resources:
<ul>
<li><a href="http://www.hibernate.org/365.html">http://www.hibernate.org/365.html</a></li>
</ul>
</li>
</ul>
<p>For those getting started I HIGHLY recommend you start with ActiveRecord from the Castle project. For more information see: <a href="http://www.castleproject.org">http://www.castleproject.org</a> and <a href="http://www.domaindotnet.com">http://www.domaindotnet.com</a> . Also make sure you check out Castle ActiveWriter! It&#8217;s great to get started.</p>
<p>The domaindotnet site is specifically setup to discuss issues such as this, but in much greater detail and with code samples. However here are some samples that I have found critical in fine tuning the architecture for domain-development.</p>
<p>1) Don&#8217;t fall into the trap of coupling the &#8216;CRUD&#8217; work (or any modifications for that matter) with what you define as your &#8216;core entities&#8217;.</p>
<p>An example would be a &#8216;Customer&#8217; domain object. Use the &#8217;strategy&#8217; pattern to inject in a service which provides the &#8216;DAO&#8217; service if you will. Use ORM technology ON THE SERVICE not the entity. Use a container for injecting services like Windsor or Spring.NET.</li>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/dcarr.wordpress.com/71/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/dcarr.wordpress.com/71/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/dcarr.wordpress.com/71/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/dcarr.wordpress.com/71/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/dcarr.wordpress.com/71/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/dcarr.wordpress.com/71/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/dcarr.wordpress.com/71/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/dcarr.wordpress.com/71/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/dcarr.wordpress.com/71/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/dcarr.wordpress.com/71/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/dcarr.wordpress.com/71/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/dcarr.wordpress.com/71/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=team.pushbomb.com&blog=2366446&post=71&subd=dcarr&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://team.pushbomb.com/2006/09/09/objectrelational-tools-nhibernate-and-microsoft-adonet-entity-framework/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/7b572cbcda5a17fe984e7dd1ddc9c3d6?s=96&#38;d=&#38;r=PG" medium="image">
			<media:title type="html">pushbomb</media:title>
		</media:content>
	</item>
	</channel>
</rss>