<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">
  <channel>
    <title>Carl Hörberg on development</title>
    <link>http://carlhoerberg.com/</link>
    <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/devcarl" /><feedburner:info uri="devcarl" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><feedburner:feedFlare href="http://fusion.google.com/add?feedurl=http%3A%2F%2Ffeeds.feedburner.com%2Fdevcarl" src="http://buttons.googlesyndication.com/fusion/add.gif">Subscribe with Google</feedburner:feedFlare><item>
      <title>Automatic backup of Heroku database to S3</title>
      <link>http://feedproxy.google.com/~r/devcarl/~3/OBdUubJfbp8/automatic-backup-of-heroku-database-to-s3</link>
      <description>&lt;p&gt;I didn't find any good solutions on how to automatically backup the Heroku database to S3, but with some inspiration from &lt;a href="http://librarymixer.posterous.com/40960547"&gt;this blog post&lt;/a&gt; I cooked up a solution which takes advantage of the &lt;a href="http://addons.heroku.com/pgbackups"&gt;PG Backups&lt;/a&gt; and &lt;a href="http://addons.heroku.com/cron"&gt;Cron&lt;/a&gt; addons on &lt;a href="http://heroku.com"&gt;Heroku&lt;/a&gt; to backup to &lt;a href="http://aws.amazon.com/s3/"&gt;S3&lt;/a&gt; daily, for free. &lt;/p&gt;

&lt;p&gt;&lt;link rel="stylesheet" href="https://gist.github.com/stylesheets/gist/embed.css"/&gt;

&lt;div id="gist-977203" class="gist"&gt;

        &lt;div class="gist-file"&gt;
          &lt;div class="gist-data gist-syntax"&gt;
              &lt;div class="gist-highlight"&gt;&lt;pre&gt;&lt;div class="line" id="LC1"&gt;&lt;span class="nb"&gt;require&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;aws/s3&amp;#39;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC2"&gt;&lt;span class="nb"&gt;require&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;heroku&amp;#39;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC3"&gt;&lt;span class="nb"&gt;require&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;heroku/command&amp;#39;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC4"&gt;&lt;span class="nb"&gt;require&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;heroku/command/auth&amp;#39;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC5"&gt;&lt;span class="nb"&gt;require&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;heroku/command/pgbackups&amp;#39;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC6"&gt;&lt;br/&gt;&lt;/div&gt;&lt;div class="line" id="LC7"&gt;&lt;span class="n"&gt;task&lt;/span&gt; &lt;span class="ss"&gt;:cron&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC8"&gt;&amp;nbsp;&amp;nbsp;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Heroku&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;Auth&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC9"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nc"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;client&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC10"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="no"&gt;Heroku&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;Client&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;new&lt;/span&gt; &lt;span class="no"&gt;ENV&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;heroku_login&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="no"&gt;ENV&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;heroku_passwd&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC11"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="k"&gt;end&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC12"&gt;&amp;nbsp;&amp;nbsp;&lt;span class="k"&gt;end&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC13"&gt;&lt;br/&gt;&lt;/div&gt;&lt;div class="line" id="LC14"&gt;&amp;nbsp;&amp;nbsp;&lt;span class="no"&gt;Heroku&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;Command&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;run&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;pgbackups:capture&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;--expire&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;--app&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="no"&gt;ENV&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;heroku_appname&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;]]&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC15"&gt;&amp;nbsp;&amp;nbsp;&lt;span class="n"&gt;url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;capture_stdout&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC16"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="no"&gt;Heroku&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;Command&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;run&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;pgbackups:url&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;--app&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;dmks&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC17"&gt;&amp;nbsp;&amp;nbsp;&lt;span class="k"&gt;end&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC18"&gt;&lt;br/&gt;&lt;/div&gt;&lt;div class="line" id="LC19"&gt;&amp;nbsp;&amp;nbsp;&lt;span class="no"&gt;AWS&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;S3&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;Base&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;establish_connection!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="ss"&gt;:access_key_id&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="no"&gt;ENV&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;s3_access_key&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;:secret_access_key&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="no"&gt;ENV&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;s3_secret_key&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC20"&gt;&amp;nbsp;&amp;nbsp;&lt;span class="no"&gt;AWS&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;S3&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;S3Object&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;store&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;pgdb-&lt;/span&gt;&lt;span class="si"&gt;#{&lt;/span&gt;&lt;span class="no"&gt;Time&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;now&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;strftime&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;%y%m%d_%H%M&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;.dump&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="no"&gt;ENV&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;s3_backup_bucket&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC21"&gt;&lt;span class="k"&gt;end&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC22"&gt;&lt;br/&gt;&lt;/div&gt;&lt;div class="line" id="LC23"&gt;&lt;span class="k"&gt;module&lt;/span&gt; &lt;span class="nn"&gt;Kernel&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC24"&gt;&amp;nbsp;&amp;nbsp;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;capture_stdout&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC25"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="n"&gt;out&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;StringIO&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;new&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC26"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="vg"&gt;$stdout&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;out&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC27"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="k"&gt;yield&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC28"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;out&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;string&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC29"&gt;&amp;nbsp;&amp;nbsp;&lt;span class="k"&gt;ensure&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC30"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="vg"&gt;$stdout&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;STDOUT&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC31"&gt;&amp;nbsp;&amp;nbsp;&lt;span class="k"&gt;end&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC32"&gt;&lt;span class="k"&gt;end&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC33"&gt;&lt;br/&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt;
          &lt;/div&gt;

          &lt;div class="gist-meta"&gt;
            &lt;a href="https://gist.github.com/raw/977203/42899f96997e17a697038b2b598a1d2730fca258/Rakefile.rb" style="float:right;"&gt;view raw&lt;/a&gt;
            &lt;a href="https://gist.github.com/977203#file_rakefile.rb" style="float:right;margin-right:10px;color:#666"&gt;Rakefile.rb&lt;/a&gt;
            &lt;a href="https://gist.github.com/977203"&gt;This Gist&lt;/a&gt; brought to you by &lt;a href="http://github.com"&gt;GitHub&lt;/a&gt;.
          &lt;/div&gt;
        &lt;/div&gt;
&lt;/div&gt;

&lt;/p&gt;

&lt;p&gt;I hade to monkey patch Heroku::Auth so it doesn't ask for login/password from the prompt, and I had to add a 'capture_stdout' to Kernel to be able to get the url I then download and upload to S3. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Update&lt;/strong&gt;: As Will Leinweber mentioned in the comments, Heroku are about to &lt;a href="http://addons.heroku.com/pgbackups"&gt;offer this functionallity&lt;/a&gt;, but to date this feature is still in private beta. &lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/devcarl?a=OBdUubJfbp8:XyfLvHjL5H4:JX1WZp-3p7k"&gt;&lt;img src="http://feeds.feedburner.com/~ff/devcarl?i=OBdUubJfbp8:XyfLvHjL5H4:JX1WZp-3p7k" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/devcarl/~4/OBdUubJfbp8" height="1" width="1"/&gt;</description>
      <pubDate>Tue, 17 May 2011 12:34:00 -0700</pubDate>
      <guid isPermaLink="false">http://carlhoerberg.com/automatic-backup-of-heroku-database-to-s3</guid>
    <feedburner:origLink>http://carlhoerberg.com/automatic-backup-of-heroku-database-to-s3</feedburner:origLink></item>
    <item>
      <title>How to list enum values in DataMapper</title>
      <link>http://feedproxy.google.com/~r/devcarl/~3/87y5-B7aeO8/datamapper-list-enum-values</link>
      <description>&lt;p&gt;The Ruby ORM &lt;a href="http://datamapper.org"&gt;DataMapper&lt;/a&gt; as a &lt;a href="http://datamapper.org/docs/dm_more/types"&gt;Enum property&lt;/a&gt; which is really handy, but you often want to list the available options in for example a form. Unfortunately it's not well documented, but this gist shows you how: &lt;/p&gt;

&lt;p&gt;&lt;link rel="stylesheet" href="https://gist.github.com/stylesheets/gist/embed.css"/&gt;

&lt;div id="gist-976228" class="gist"&gt;

        &lt;div class="gist-file"&gt;
          &lt;div class="gist-data gist-syntax"&gt;
              &lt;div class="gist-highlight"&gt;&lt;pre&gt;&lt;div class="line" id="LC1"&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Entity&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC2"&gt;&amp;nbsp;&amp;nbsp;&lt;span class="kp"&gt;include&lt;/span&gt; &lt;span class="no"&gt;DataMapper&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;Resource&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC3"&gt;&amp;nbsp;&amp;nbsp;&lt;span class="n"&gt;property&lt;/span&gt; &lt;span class="ss"&gt;:enum_property&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="no"&gt;Enum&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="ss"&gt;:a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;:b&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;:c&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC4"&gt;&lt;span class="k"&gt;end&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC5"&gt;&lt;br/&gt;&lt;/div&gt;&lt;div class="line" id="LC6"&gt;&lt;span class="no"&gt;Entity&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;enum_property&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;options&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="ss"&gt;:flags&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="c1"&gt;#=&amp;gt; [:a, :b, :c]&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC7"&gt;&lt;span class="c1"&gt;# or&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC8"&gt;&lt;span class="no"&gt;Entity&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;enum_property&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;flag_option&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;values&lt;/span&gt; &lt;span class="c1"&gt;#=&amp;gt; [:a, :b, :c]&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC9"&gt;&lt;br/&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt;
          &lt;/div&gt;

          &lt;div class="gist-meta"&gt;
            &lt;a href="https://gist.github.com/raw/976228/1931032fa61118b74f3ad6b91613394da74b78a4/gistfile1.rb" style="float:right;"&gt;view raw&lt;/a&gt;
            &lt;a href="https://gist.github.com/976228#file_gistfile1.rb" style="float:right;margin-right:10px;color:#666"&gt;gistfile1.rb&lt;/a&gt;
            &lt;a href="https://gist.github.com/976228"&gt;This Gist&lt;/a&gt; brought to you by &lt;a href="http://github.com"&gt;GitHub&lt;/a&gt;.
          &lt;/div&gt;
        &lt;/div&gt;
&lt;/div&gt;

&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/devcarl?a=87y5-B7aeO8:hbSQ1aSunBs:JX1WZp-3p7k"&gt;&lt;img src="http://feeds.feedburner.com/~ff/devcarl?i=87y5-B7aeO8:hbSQ1aSunBs:JX1WZp-3p7k" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/devcarl/~4/87y5-B7aeO8" height="1" width="1"/&gt;</description>
      <pubDate>Tue, 17 May 2011 02:53:00 -0700</pubDate>
      <guid isPermaLink="false">http://carlhoerberg.com/datamapper-list-enum-values</guid>
    <feedburner:origLink>http://carlhoerberg.com/datamapper-list-enum-values</feedburner:origLink></item>
    <item>
      <title>Why Ruby is so much better than C#</title>
      <link>http://feedproxy.google.com/~r/devcarl/~3/BEcc19d6hmo/why-ruby-is-so-much-better-than-csharp</link>
      <description>&lt;p&gt;I've been thinking a lot about why my development team is so much more productive since we switched to &lt;a href="http://www.ruby-lang.org"&gt;Ruby&lt;/a&gt;/&lt;a href="http://sinatrarb.com"&gt;Sinatra&lt;/a&gt; from C#/Asp.Net MVC. Do we get stuck less often? No, learning new libs always takes times and have some quirkies. Are we better Ruby programmers than C# progammers? Most unlikely, at least we got a lot of more C# experince. So what is it? I think &lt;a href="http://openmymind.net/"&gt;Karl Seguin&lt;/a&gt; can be on to something:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;I don't think C#/Java developers have any concept of how much energy/productivity they spend on decoupling. Worse, I think many C#/Java developers don't understand that DI, interface-based programming, and fear of statics, is result of language limitations.
-- &lt;a href="http://openmymind.net/2011/5/3/Dealing-with-Now-and-why-i-am-almost-done-C%23-and-J"&gt;Karl Seguin&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;In C# you have to have so much infrastructure, and you tend to work a lot with it. You put a lot of effort to not use static, not coupling classes etc. because then you are in a lot of trouble when it comes to testing. In Ruby it's so much easier to just get things done. No Visual Studio bloat, adding a ton of libs, wiring up DI, separting you domain models from you ORM etc. And because of the simplicity of the language constructors you don't miss VisualStudio, IntelliSense or ReSharper. The speed you get with &lt;a href="http://www.vim.org"&gt;Vim&lt;/a&gt; when using Ruby is staggering.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/devcarl?a=BEcc19d6hmo:r7H8q26mp5M:JX1WZp-3p7k"&gt;&lt;img src="http://feeds.feedburner.com/~ff/devcarl?i=BEcc19d6hmo:r7H8q26mp5M:JX1WZp-3p7k" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/devcarl/~4/BEcc19d6hmo" height="1" width="1"/&gt;</description>
      <pubDate>Tue, 03 May 2011 23:17:00 -0700</pubDate>
      <guid isPermaLink="false">http://carlhoerberg.com/why-ruby-is-so-much-better-than-csharp</guid>
    <feedburner:origLink>http://carlhoerberg.com/why-ruby-is-so-much-better-than-csharp</feedburner:origLink></item>
    <item>
      <title>New blog</title>
      <link>http://feedproxy.google.com/~r/devcarl/~3/ErLa4c8DRfE/new-blog</link>
      <description>&lt;p&gt;I justed moved my blog from &lt;a href="http://posterous.com"&gt;Posterous&lt;/a&gt;, &lt;a href="https://github.com/carlhoerberg/carlhoerberg-blog"&gt;rolled my own blog engine&lt;/a&gt; and put it on &lt;a href="http://heroku.com"&gt;Heroku&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;The architecture is really simple, it's a plain &lt;a href="http://sinatrarb.com"&gt;Sinatra&lt;/a&gt; app which just reads the posts from a static YAML file. Of course it want scale if you blog like &lt;a href="http://ayende.com/Blog/"&gt;Ayende Rahien&lt;/a&gt; but for me it will do until later. Comments are provided through &lt;a href="http://disqus.com"&gt;Disqus&lt;/a&gt;. The posts is formatted in Markdown. There are several reasons why I like having my posts under source control: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;No need for database backup&lt;/li&gt;
&lt;li&gt;I can use Vim to write my posts&lt;/li&gt;
&lt;li&gt;The site is read-only, so no security mesaures is needed.&lt;/li&gt;
&lt;li&gt;No editor or domain models is needed in the app. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You can see &lt;a href="https://github.com/carlhoerberg/carlhoerberg-blog"&gt;the code&lt;/a&gt; over at &lt;a href="https://github.com"&gt;GitHub&lt;/a&gt;.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/devcarl?a=ErLa4c8DRfE:gHp_vjNzrzU:JX1WZp-3p7k"&gt;&lt;img src="http://feeds.feedburner.com/~ff/devcarl?i=ErLa4c8DRfE:gHp_vjNzrzU:JX1WZp-3p7k" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/devcarl/~4/ErLa4c8DRfE" height="1" width="1"/&gt;</description>
      <pubDate>Tue, 03 May 2011 12:29:00 -0700</pubDate>
      <guid isPermaLink="false">http://carlhoerberg.com/new-blog</guid>
    <feedburner:origLink>http://carlhoerberg.com/new-blog</feedburner:origLink></item>
    <item>
      <title>How to unit test RabbitMQ in C#</title>
      <link>http://feedproxy.google.com/~r/devcarl/~3/MS6dqtkxBsI/how-to-unit-test-rabbitmq-in-c</link>
      <description>&lt;p&gt;&lt;a href="http://www.rabbitmq.com/"&gt;RabbitMQ &lt;/a&gt;is a very good open source message queue server, but unfortunately it's &lt;a href="http://www.rabbitmq.com/dotnet.html"&gt;DotNet API&lt;/a&gt; isn't very &amp;quot;dotnetish&amp;quot;. Well, finally I figured out a way to unit test classes which relied upon IModel.&lt;/p&gt;

&lt;p&gt;&lt;link rel="stylesheet" href="https://gist.github.com/stylesheets/gist/embed.css"/&gt;

&lt;div id="gist-751617" class="gist"&gt;

        &lt;div class="gist-file"&gt;
          &lt;div class="gist-data gist-syntax"&gt;
              &lt;div class="gist-highlight"&gt;&lt;pre&gt;&lt;div class="line" id="LC1"&gt;&lt;span class="na"&gt;[TestFixture]&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC2"&gt;&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;RabbitMQTest&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC3"&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC4"&gt;&lt;span class="na"&gt;    [Test]&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC5"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;CanMockMQ&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC6"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="p"&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC7"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="c1"&gt;// Arrange&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC8"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="n"&gt;var&lt;/span&gt; &lt;span class="n"&gt;channelMock&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;Mock&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;IModel&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;();&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC9"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="n"&gt;channelMock&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC10"&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 class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Setup&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;m&lt;/span&gt; &lt;span class="p"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;m&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;BasicConsume&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;It&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;IsAny&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;(),&lt;/span&gt; &lt;span class="n"&gt;It&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;IsAny&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kt"&gt;bool&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;(),&lt;/span&gt; &lt;span class="n"&gt;It&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;IsAny&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;IDictionary&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;(),&lt;/span&gt; &lt;span class="n"&gt;It&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;IsAny&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;IBasicConsumer&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;()))&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC11"&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 class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Callback&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;bool&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;object&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;IBasicConsumer&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;((&lt;/span&gt;&lt;span class="n"&gt;queue&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;noAck&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;props&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;consumer&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;consumer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;HandleBasicDeliver&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;exchange&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;route&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;null&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="kt"&gt;byte&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]));&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC12"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="n"&gt;var&lt;/span&gt; &lt;span class="n"&gt;server&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;MQUser&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;channelMock&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Object&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC13"&gt;&lt;br/&gt;&lt;/div&gt;&lt;div class="line" id="LC14"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="c1"&gt;// Act&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC15"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="n"&gt;server&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Abort&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC16"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="n"&gt;server&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;DoStuff&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC17"&gt;&lt;br/&gt;&lt;/div&gt;&lt;div class="line" id="LC18"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="c1"&gt;// Assert&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC19"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="n"&gt;channelMock&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Verify&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;m&lt;/span&gt; &lt;span class="p"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;m&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;BasicAck&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;false&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC20"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="p"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC21"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt;
          &lt;/div&gt;

          &lt;div class="gist-meta"&gt;
            &lt;a href="https://gist.github.com/raw/751617/2c9394e21cd8765243750b60b6e19f796823bf47/Test.cs" style="float:right;"&gt;view raw&lt;/a&gt;
            &lt;a href="https://gist.github.com/751617#file_test.cs" style="float:right;margin-right:10px;color:#666"&gt;Test.cs&lt;/a&gt;
            &lt;a href="https://gist.github.com/751617"&gt;This Gist&lt;/a&gt; brought to you by &lt;a href="http://github.com"&gt;GitHub&lt;/a&gt;.
          &lt;/div&gt;
        &lt;/div&gt;

        &lt;div class="gist-file"&gt;
          &lt;div class="gist-data gist-syntax"&gt;
              &lt;div class="gist-highlight"&gt;&lt;pre&gt;&lt;div class="line" id="LC1"&gt;&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;MQUser&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC2"&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="k"&gt;readonly&lt;/span&gt; &lt;span class="n"&gt;IModel&lt;/span&gt; &lt;span class="n"&gt;channel&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC4"&gt;&lt;br/&gt;&lt;/div&gt;&lt;div class="line" id="LC5"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="nf"&gt;MQUser&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;IModel&lt;/span&gt; &lt;span class="n"&gt;channel&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC6"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="p"&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC7"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;channel&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;channel&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC8"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="p"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC9"&gt;&lt;br/&gt;&lt;/div&gt;&lt;div class="line" id="LC10"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;DoStuff&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC11"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="p"&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC12"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="n"&gt;var&lt;/span&gt; &lt;span class="n"&gt;queueName&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;channel&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;QueueDeclare&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC13"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="n"&gt;var&lt;/span&gt; &lt;span class="n"&gt;subscription&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;Subscription&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;channel&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;queueName&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC14"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="k"&gt;do&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC15"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="p"&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC16"&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 class="n"&gt;var&lt;/span&gt; &lt;span class="n"&gt;msg&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;subscription&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Next&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC17"&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 class="c1"&gt;// Do stuff with the message&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC18"&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 class="n"&gt;subscription&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Ack&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;msg&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC19"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="p"&gt;(!&lt;/span&gt;&lt;span class="n"&gt;aborted&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC20"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="p"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC21"&gt;&lt;br/&gt;&lt;/div&gt;&lt;div class="line" id="LC22"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="kt"&gt;bool&lt;/span&gt; &lt;span class="n"&gt;aborted&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC23"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;Abort&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC24"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="p"&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC25"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="n"&gt;aborted&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC26"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="p"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC27"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC28"&gt;&lt;br/&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt;
          &lt;/div&gt;

          &lt;div class="gist-meta"&gt;
            &lt;a href="https://gist.github.com/raw/751617/39e6582c8bdbf9005a4a23f72c534249187db890/TestSubject.cs" style="float:right;"&gt;view raw&lt;/a&gt;
            &lt;a href="https://gist.github.com/751617#file_test_subject.cs" style="float:right;margin-right:10px;color:#666"&gt;TestSubject.cs&lt;/a&gt;
            &lt;a href="https://gist.github.com/751617"&gt;This Gist&lt;/a&gt; brought to you by &lt;a href="http://github.com"&gt;GitHub&lt;/a&gt;.
          &lt;/div&gt;
        &lt;/div&gt;
&lt;/div&gt;

&lt;/p&gt;

&lt;p&gt;It uses &lt;a href="http://code.google.com/p/moq/"&gt;Moq&lt;/a&gt; which let us mock the IModel interface and intercepts all calls to IModel#BasicConsume, which all subscribers must call to subscribe for messages, and then imeditly call IModel#HandleBasicDeliver which propagetes that a messages has arrived to the subscriber. Then the test continues by starting the class under test which contains a simple subscriber in a abortable loop. We will abort it before starting the loop (but becasue it's a do-while loop, it will try to fetch one message before returning). At last we verify that the message has been acknowledged.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/devcarl?a=MS6dqtkxBsI:RaOc7rQVuPk:JX1WZp-3p7k"&gt;&lt;img src="http://feeds.feedburner.com/~ff/devcarl?i=MS6dqtkxBsI:RaOc7rQVuPk:JX1WZp-3p7k" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/devcarl/~4/MS6dqtkxBsI" height="1" width="1"/&gt;</description>
      <pubDate>Sun, 02 Jan 2011 13:01:00 -0800</pubDate>
      <guid isPermaLink="false">http://carlhoerberg.com/how-to-unit-test-rabbitmq-in-c</guid>
    <feedburner:origLink>http://carlhoerberg.com/how-to-unit-test-rabbitmq-in-c</feedburner:origLink></item>
    <item>
      <title>iPad app tips</title>
      <link>http://feedproxy.google.com/~r/devcarl/~3/e24-qC8j0Jw/ipad-app-tips</link>
      <description>&lt;p&gt;Quite a few friends are equipping them self with iPad's now that they finally are available in Sweden, and while I've had one for 6-7 months by now I though it could be good idea to list my most frequently used apps. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Spotify (iPhone), with iOS 4.2 (multitasking) this app is a must. &lt;/li&gt;
&lt;li&gt;  Wikipanion, wikipedia client. &lt;/li&gt;
&lt;li&gt;  IMDb, very good high quality IMDb client. &lt;/li&gt;
&lt;li&gt;  Heritage, photos from all world heritages sites. &lt;/li&gt;
&lt;li&gt;  Skype, the iPad's built in mic and speakers are very high quality. &lt;/li&gt;
&lt;li&gt;  Instapaper, when ever i encounter long but interresting articles I mark them as &amp;quot;Read leader&amp;quot; in Chrome, and then use this app to read it because of the much more pleasant reading experience on the pad.&lt;br&gt;&lt;/li&gt;
&lt;li&gt;  Angry Birds, doesn't need any introduction.. &lt;/li&gt;
&lt;li&gt;  Cut the Rope, a game in the same spirit as Angry Birds. Easy and entertaining. &lt;/li&gt;
&lt;li&gt;  Monkey Island 2 Special Edition, better graphics, voice dialogs, same good story. &lt;/li&gt;
&lt;li&gt;  Dreams, find differences between two pictures, child game which also adults enjoys. &lt;/li&gt;
&lt;li&gt;  Sudoku Tablet, for the Sudoku lovers. &lt;/li&gt;
&lt;li&gt;  iBooks, &lt;em&gt;the&lt;/em&gt; PDF and eBook reader. &lt;/li&gt;
&lt;li&gt;  Kindle, get access to the full Amazon book supply. &lt;/li&gt;
&lt;li&gt;  River of News, best RSS/Google Reader app I've found. &lt;/li&gt;
&lt;li&gt;  Twitter, best twitter client, in all categories. Actually makes Twitter usable. &lt;/li&gt;
&lt;li&gt;  Line Art, meaningless but relaxing and beautiful app where you control a myriad of lines/dots with your fingers. &lt;/li&gt;
&lt;li&gt;  LIFE, breathtaking photos from the american Life magazine. I can browse it for hours.&lt;/li&gt;
&lt;li&gt;  Dropbox, file backup/sharing. &lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;Swedish&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;  DN+, a app which actually embrace the iPad (unlike for example SVD which merely is a glorified PDF reader). &lt;/li&gt;
&lt;li&gt;  ÖGT (iPhone), unexpectedly good local traffic app (for Östergötland).&lt;br&gt;&lt;/li&gt;
&lt;li&gt;  Krysset, crossword game from Bonnier.&lt;br&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;Apps which ought to be good but which I've haven't used a lot.&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;  TED, great, short, insightful videos. &lt;/li&gt;
&lt;li&gt;  VLC, play videos of formats the iPad normally don't support, like xvid (you still need iTunes to transfer the videos, which is a show blocker for me). &lt;/li&gt;
&lt;li&gt;  Trapster, warnings for speed cameras/police checkpoints, crowd sourced. Hard to determine the reliability.&lt;/li&gt;
&lt;li&gt;  RDP Lite, Windows Remote Desktop client for those who have to administer windows servers.&lt;br&gt;&lt;/li&gt;
&lt;li&gt;  Flipboard, very hype. Shows of Twitter and other sources as a traditional newspaper. &lt;/li&gt;
&lt;li&gt;  Eyewithness, beautiful and engaging photos from the Guardian. &lt;/li&gt;
&lt;li&gt;  Grand Theft Auto, CTW Lite. Quite entertaining (the one time I played it). &lt;/li&gt;
&lt;li&gt;  IM+, the iPad don't lend it self for a lot of keyboard typing, but when you have to chat IM+ is my choice. &lt;/li&gt;
&lt;li&gt;  The Economist, the free edition only allows you the read Editor picks, but the app is very high quality and so is of course the content.&lt;/li&gt;
&lt;li&gt;  eBokus (Swedish), swedish books. &lt;/li&gt;
&lt;li&gt;  Trafikinfo (Swedish), traffic information, great to be aware of accidents or road works before you're in the queue.&lt;/li&gt;
&lt;/ul&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/devcarl?a=e24-qC8j0Jw:1AcSPSVg-js:JX1WZp-3p7k"&gt;&lt;img src="http://feeds.feedburner.com/~ff/devcarl?i=e24-qC8j0Jw:1AcSPSVg-js:JX1WZp-3p7k" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/devcarl/~4/e24-qC8j0Jw" height="1" width="1"/&gt;</description>
      <pubDate>Sun, 12 Dec 2010 14:58:00 -0800</pubDate>
      <guid isPermaLink="false">http://carlhoerberg.com/ipad-app-tips</guid>
    <feedburner:origLink>http://carlhoerberg.com/ipad-app-tips</feedburner:origLink></item>
    <item>
      <title>Twitter + Beanstalk + EventMachine + WebSocket</title>
      <link>http://feedproxy.google.com/~r/devcarl/~3/0Q9dk84j8m4/twitter-beanstalk-eventmachine-websocket</link>
      <description>&lt;p&gt;Justed &lt;a href="http://github.com/carlhoerberg/twitter-beanstalk-websocket-example"&gt;forked&lt;/a&gt; a &lt;a href="http://github.com/rubenfonseca/twitter-amqp-websocket-example"&gt;Twitter AMQP WebSocket example&lt;/a&gt; project by &lt;a href="http://github.com/rubenfonseca"&gt;Ruben Fonseca&lt;/a&gt; but replaced the AMQP/RabbitMQ with &lt;a href="http://kr.github.com/beanstalkd/"&gt;Beanstalk&lt;/a&gt; instead. I've been playing with this fast and simple message queue called Beanstalk for a couple of days and now wanted to see if I could do some WebSocket work with it as well. You can find an &lt;a href="http://www.igvita.com/2010/05/20/scalable-work-queues-with-beanstalk/"&gt;introduction to Beanstalk here&lt;/a&gt; and &lt;a href="http://adam.heroku.com/past/2010/4/24/beanstalk_a_simple_and_fast_queueing_backend/"&gt;some comparison to other MQs here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The &lt;a href="http://github.com/eventmachine/eventmachine/wiki"&gt;EventMachine&lt;/a&gt;, which is a highly scalable, event driven i/o library for ruby (and c++ and java), was a very nice surprise and was very easy to work with. Both the &lt;a href="http://github.com/voloko/twitter-stream"&gt;Twitter Streaming library&lt;/a&gt;, the &lt;a href="http://github.com/dj2/em-jack"&gt;Beanstalk client&lt;/a&gt; and the &lt;a href="http://github.com/igrigorik/em-websocket"&gt;WebSocket server&lt;/a&gt; uses EventMachine so the whole example it fully asynchronous and probably quite scalable.&lt;/p&gt;

&lt;p&gt;Check it out: &lt;a href="http://github.com/carlhoerberg/twitter-beanstalk-websocket-example"&gt;http://github.com/carlhoerberg/twitter-beanstalk-websocket-example&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/devcarl?a=0Q9dk84j8m4:2QywFLXASAo:JX1WZp-3p7k"&gt;&lt;img src="http://feeds.feedburner.com/~ff/devcarl?i=0Q9dk84j8m4:2QywFLXASAo:JX1WZp-3p7k" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/devcarl/~4/0Q9dk84j8m4" height="1" width="1"/&gt;</description>
      <pubDate>Wed, 13 Oct 2010 11:05:00 -0700</pubDate>
      <guid isPermaLink="false">http://carlhoerberg.com/twitter-beanstalk-eventmachine-websocket</guid>
    <feedburner:origLink>http://carlhoerberg.com/twitter-beanstalk-eventmachine-websocket</feedburner:origLink></item>
    <item>
      <title>How to override ActiveRecord primary key and foreign key conventions</title>
      <link>http://feedproxy.google.com/~r/devcarl/~3/X6ofp-98-zM/how-to-override-activerecord-primary-key-and-foreign-key-conventions</link>
      <description>&lt;p&gt;While evaluating the &lt;a href="http://github.com/rails-sqlserver/activerecord-sqlserver-adapter"&gt;Microsoft SQL Server adapter&lt;/a&gt; for &lt;a href="http://guides.rubyonrails.org/active_record_querying.html"&gt;ActiveRecord &lt;/a&gt;and &lt;a href="http://ironruby.net/"&gt;IronRuby &lt;/a&gt;i wanted the ability to override some activerecord conventions, class wide, so I didn't have to override it in every class and every association. Specifically I wanted the foreign keys to be named &amp;quot;classNameId&amp;quot; and not &amp;quot;className_id&amp;quot; and the primary keys &amp;quot;Id&amp;quot; instead of lower case &amp;quot;id&amp;quot;, this is how you do it: 
&lt;link rel="stylesheet" href="https://gist.github.com/stylesheets/gist/embed.css"/&gt;

&lt;div id="gist-614933" class="gist"&gt;

        &lt;div class="gist-file"&gt;
          &lt;div class="gist-data gist-syntax"&gt;
              &lt;div class="gist-highlight"&gt;&lt;pre&gt;&lt;div class="line" id="LC1"&gt;&lt;span class="k"&gt;module&lt;/span&gt; &lt;span class="nn"&gt;ActiveSupport&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC2"&gt;&amp;nbsp;&amp;nbsp;&lt;span class="k"&gt;module&lt;/span&gt; &lt;span class="nn"&gt;Inflector&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="k"&gt;alias&lt;/span&gt; &lt;span class="ss"&gt;:old_foreign_key&lt;/span&gt; &lt;span class="ss"&gt;:foreign_key&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC4"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;foreign_key&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;class_name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;separate_class_name_and_id_with_underscore&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kp"&gt;true&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC5"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="n"&gt;old_foreign_key&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;class_name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kp"&gt;false&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC6"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="k"&gt;end&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC7"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;tableize&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;class_name&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC8"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="n"&gt;class_name&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC9"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="k"&gt;end&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC10"&gt;&amp;nbsp;&amp;nbsp;&lt;span class="k"&gt;end&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC11"&gt;&lt;span class="k"&gt;end&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC12"&gt;&lt;br/&gt;&lt;/div&gt;&lt;div class="line" id="LC13"&gt;&lt;span class="k"&gt;module&lt;/span&gt; &lt;span class="nn"&gt;ActiveRecord&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC14"&gt;&amp;nbsp;&amp;nbsp;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Base&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC15"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class="nb"&gt;self&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC16"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;get_primary_key&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;base_name&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;#:nodoc:&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC17"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="s2"&gt;&amp;quot;Id&amp;quot;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC18"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="k"&gt;end&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC19"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="k"&gt;end&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC20"&gt;&amp;nbsp;&amp;nbsp;&lt;span class="k"&gt;end&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC21"&gt;&lt;span class="k"&gt;end&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt;
          &lt;/div&gt;

          &lt;div class="gist-meta"&gt;
            &lt;a href="https://gist.github.com/raw/614933/094ec908d48f753c49e9e9c861599770d0a6a794/gistfile1.rb" style="float:right;"&gt;view raw&lt;/a&gt;
            &lt;a href="https://gist.github.com/614933#file_gistfile1.rb" style="float:right;margin-right:10px;color:#666"&gt;gistfile1.rb&lt;/a&gt;
            &lt;a href="https://gist.github.com/614933"&gt;This Gist&lt;/a&gt; brought to you by &lt;a href="http://github.com"&gt;GitHub&lt;/a&gt;.
          &lt;/div&gt;
        &lt;/div&gt;
&lt;/div&gt;

&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/devcarl?a=X6ofp-98-zM:JlleKkPz-hY:JX1WZp-3p7k"&gt;&lt;img src="http://feeds.feedburner.com/~ff/devcarl?i=X6ofp-98-zM:JlleKkPz-hY:JX1WZp-3p7k" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/devcarl/~4/X6ofp-98-zM" height="1" width="1"/&gt;</description>
      <pubDate>Thu, 07 Oct 2010 04:40:00 -0700</pubDate>
      <guid isPermaLink="false">http://carlhoerberg.com/how-to-override-activerecord-primary-key-and-foreign-key-conventions</guid>
    <feedburner:origLink>http://carlhoerberg.com/how-to-override-activerecord-primary-key-and-foreign-key-conventions</feedburner:origLink></item>
    <item>
      <title>My development stack</title>
      <link>http://feedproxy.google.com/~r/devcarl/~3/63coNeJndis/my-development-stack</link>
      <description>&lt;p&gt;This is the development stack I employ, and why I chosed it:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.asp.net/mvc"&gt;ASP.NET MVC&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Being mostly a C# programmer (altough Ruby is growing on me) &lt;a href="http://ASP.NET"&gt;ASP.NET&lt;/a&gt; MVC is a pretty natural selection, being the most popular MVC framework for .NET. I don't think _not_ using a MVC framework for web development is very serious today. A MVC framework got so many benefits compared to for example WebForms I can't even begin, so i let &lt;a href="http://codebetter.com/blogs/karlseguin/archive/2010/03/11/webforms-vs-mvc-again.aspx"&gt;Karl Seguin explain MVC vs. WebForms&lt;/a&gt; instead. &lt;/p&gt;

&lt;p&gt;&lt;a href="http://code.google.com/p/autofac/"&gt;Autofac&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In a static language like C# you can't live without a dependency injection framework, i choose Autofac a long time ago and have stuck with it, i think most IoC frameworks are on par in the .NET world, but it seems to me that Autofac most often have the edge, coming up with new compelling features first.   &lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.nunit.org/"&gt;nUnit&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Proven unit testing framework. Tried xUnit for a while but the poor tool support (in ReSharper and TeamCity) made me go back to nUnit, it just works. &lt;/p&gt;

&lt;p&gt;&lt;a href="http://code.google.com/p/moq/"&gt;Moq&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;There have been a lot of discussions on wether to use a mocking framework or not, but I like to write as lite code as possible when testing so a mocking  is a perfect fit for me. &lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.specflow.org/"&gt;SpecFlow&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The Ruby community came up with Cucumber in which you write specifications in plain english (or swedish), and have become very successful. The idea has now been ported to .NET. Our customers love it! &lt;/p&gt;

&lt;p&gt;&lt;a href="http://watin.sourceforge.net/"&gt;WatiN&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For integration testing we use WatiN which automates Internet Explorer (and Firefox). &lt;/p&gt;

&lt;p&gt;&lt;a href="http://automapper.codeplex.com/"&gt;AutoMapper&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Mapping code is boring and error prone, automapper lets us do the entity-&amp;gt;viewmodel mapping by ease. &lt;/p&gt;

&lt;p&gt;&lt;a href="http://code.google.com/p/elmah/"&gt;Elmah&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Web error logging module, drop it in and all unhandled exceptions are mailed to us. &lt;/p&gt;

&lt;p&gt;&lt;a href="http://logging.apache.org/log4net/"&gt;log4net&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Proven logging framework for .NET, we use it in all apps for error and trace logging. Although, it's pretty ugly to configure through code. &lt;/p&gt;

&lt;p&gt;&lt;a href="http://pdfsharp.com/"&gt;PdfSharp&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;PDF creator, a lot better API than iTextSharp, but don't got all the features of it.  &lt;/p&gt;

&lt;p&gt;&lt;a href="http://npoi.codeplex.com/"&gt;NPOI&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Excel file creator, ported for java's POI, which the API suffers from, but got a lot of features (except rendering charts dynamically, which is a bummer. &lt;/p&gt;

&lt;p&gt;&lt;a href="http://mvccontrib.codeplex.com/wikipage?title=T4MVC&amp;referringTitle=Documentation"&gt;T4MVC&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Instead of referring to views and actions in code with &amp;quot;magic string&amp;quot; T4MVC creates strongly typed helpers for you. &lt;/p&gt;

&lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/bb386976.aspx"&gt;Linq to SQL&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A simple ORM which don't got the impressive feature set or the performance of &lt;a href="http://fluentnhibernate.org/"&gt;nHibernate&lt;/a&gt;, but do got a supreme LINQ engine. Read my post on &lt;a href="http://devcarl.posterous.com/efficient-workflow-with-linq-to-sql-migrator"&gt;how to get the most out of Linq to SQL&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://code.google.com/p/migratordotnet/"&gt;MigratorDotNet&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Don't do RMDBS with out a migration tool. It will ease a lot of the pain a static schema forces upon you. MigratorDotNet isn't maintained anymore but some alternatives are &lt;a href="http://nmigrations.codeplex.com/"&gt;NMigrations&lt;/a&gt; and &lt;a href="http://wiki.github.com/schambers/fluentmigrator/"&gt;Fluent Migrator&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;&lt;a href="http://jquery.com/"&gt;jQuery&lt;/a&gt; (and &lt;a href="http://jqueryui.com/"&gt;jQuery UI&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;For all our javascript needs..&lt;/p&gt;

&lt;p&gt;&lt;a href="http://developer.yahoo.com/yui/grids/builder/"&gt;YUI Grids&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;CSS framework, but will probably use &lt;a href="http://960.gs"&gt;960 Grid System&lt;/a&gt; next time.  &lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.jetbrains.com/teamcity/"&gt;TeamCity&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Continuous integration has always been a natural part of your workflow. TeamCity is very feature rich build management and CI server. It listens at our source code repository for changes, when some one commits anything it builds it, run all unit and integration tests and then deploys it to the staging/production servers, all with out us moving a finger. &lt;/p&gt;

&lt;p&gt;&lt;a href="http://github.com/"&gt;GitHub&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Previously we used SVN with &lt;a href="http://www.visualsvn.com/"&gt;VisualSVN&lt;/a&gt; and hosted it ourself, but we've now employing Git, mostly because it's very good branch capabilities. Although a Git server is some what cumbersome to set up on a windows machine, so just signed up for GitHub, less hassel. &lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.cygwin.com/"&gt;Cygwin&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Unfortunately the Git support for windows is quite bad, so we use Cygwin (which &amp;quot;emulates&amp;quot; the linux api) to get the power of all those linux commands and applications, including Git right at our windows desktops. &lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/devcarl?a=63coNeJndis:eoRhp-VQAiA:JX1WZp-3p7k"&gt;&lt;img src="http://feeds.feedburner.com/~ff/devcarl?i=63coNeJndis:eoRhp-VQAiA:JX1WZp-3p7k" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/devcarl/~4/63coNeJndis" height="1" width="1"/&gt;</description>
      <pubDate>Sat, 11 Sep 2010 10:45:00 -0700</pubDate>
      <guid isPermaLink="false">http://carlhoerberg.com/my-development-stack</guid>
    <feedburner:origLink>http://carlhoerberg.com/my-development-stack</feedburner:origLink></item>
    <item>
      <title>Cygwin git svn unable to remap?</title>
      <link>http://feedproxy.google.com/~r/devcarl/~3/hOyiCzVO0Xs/cygwin-git-svn-unable-to-remap</link>
      <description>&lt;p&gt;Getting errors like the one below in Cygwin? &lt;/p&gt;
&lt;blockquote&gt;
&lt;pre&gt;&lt;code&gt;  2 [main] perl 8496 C:\cygwin\bin\perl.exe: \***| fatal error - unable to remap C:\cygwin\bin\cygsvn\_fs\_base-1-0.dll to same address as parent: 0xB00000 != 0xC10000   
  2 [main] perl 11192 fork: child 8496 - died waiting for dll loading, errno 11   
  2 [main] perl 8496 C:\cygwin\bin\perl.exe: \***| fatal error - unable to remap C:\cygwin\bin\cygsvn\_fs\_base-1-0.dll to same address as parent: 0xB00000 != 0xC10000   
  2 [main] perl 11192 fork: child 8496 - died waiting for dll loading, errno 11
&lt;/code&gt;&lt;/pre&gt;
&lt;/blockquote&gt;
&lt;p&gt;Solution: Temporally disable your anti-virus software.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/devcarl?a=hOyiCzVO0Xs:mcmrWmKRrKY:JX1WZp-3p7k"&gt;&lt;img src="http://feeds.feedburner.com/~ff/devcarl?i=hOyiCzVO0Xs:mcmrWmKRrKY:JX1WZp-3p7k" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/devcarl/~4/hOyiCzVO0Xs" height="1" width="1"/&gt;</description>
      <pubDate>Wed, 08 Sep 2010 01:21:00 -0700</pubDate>
      <guid isPermaLink="false">http://carlhoerberg.com/cygwin-git-svn-unable-to-remap</guid>
    <feedburner:origLink>http://carlhoerberg.com/cygwin-git-svn-unable-to-remap</feedburner:origLink></item>
    <item>
      <title>Efficient workflow with Linq to Sql using Migrator, T4 and some Xslt</title>
      <link>http://feedproxy.google.com/~r/devcarl/~3/eVi1_0MWzNg/efficient-workflow-with-linq-to-sql-using-migrator-t4-and-some-xslt</link>
      <description>&lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/bb425822.aspx"&gt;Linq to SQL&lt;/a&gt; is still my favorite datalayer, why? Excellent Linq capabilities and the fact that I only have to change my database once, and my code/entities will be immediately reflected. How? &lt;/p&gt;

&lt;p&gt;First, download &lt;a href="http://code.google.com/p/migratordotnet/"&gt;MigratorDotNet&lt;/a&gt;, it's a utility for database migrations, which versions your database changes in code: &lt;a href="http://code.google.com/p/migratordotnet/wiki/GettingStarted"&gt;http://code.google.com/p/migratordotnet/wiki/GettingStarted&lt;/a&gt;. Create a new library in your solution and start &lt;a href="http://code.google.com/p/migratordotnet/wiki/WritingMigrations"&gt;writing migrations&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Don't let VS generate your datacontext and entities, &lt;a href="http://l2st4.codeplex.com/"&gt;L2ST4&lt;/a&gt; does it a lot better, essentially it's T4 templates which allows you to change exactly the way your datacontext and entities are generated.&lt;/p&gt;

&lt;p&gt;Now copy and add &lt;a href="&lt;link rel="stylesheet" href="https://gist.github.com/stylesheets/gist/embed.css"/&gt;

&lt;div id="gist-414291" class="gist"&gt;

        &lt;div class="gist-file"&gt;
          &lt;div class="gist-data gist-syntax"&gt;
              &lt;div class="gist-highlight"&gt;&lt;pre&gt;&lt;div class="line" id="LC1"&gt;&lt;span class="p"&gt;@&lt;/span&gt;&lt;span class="k"&gt;echo&lt;/span&gt; &lt;span class="k"&gt;off&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC2"&gt;&lt;span class="k"&gt;setlocal&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC3"&gt;&lt;span class="k"&gt;set&lt;/span&gt; &lt;span class="nv"&gt;path&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;%CommonProgramFiles(x86)%\\microsoft shared\\TextTemplating\\10.0&amp;quot;&lt;/span&gt;;&lt;span class="s2"&gt;&amp;quot;%ProgramFiles(x86)%\\Microsoft SDKs\\Windows\\v7.0A\\Bin\\NETFX 4.0 Tools&amp;quot;&lt;/span&gt;;&lt;span class="nv"&gt;%path%&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC4"&gt;&lt;br/&gt;&lt;/div&gt;&lt;div class="line" id="LC5"&gt;&lt;span class="k"&gt;set&lt;/span&gt; &lt;span class="nv"&gt;connStr&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Data Source=.\\SQLEXPRESS;Initial Catalog=MyDB;Integrated Security=true&amp;quot;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC6"&gt;&lt;br/&gt;&lt;/div&gt;&lt;div class="line" id="LC7"&gt;&lt;span class="c"&gt;REM Download MigratorDotNet from http://code.google.com/p/migratordotnet/&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC8"&gt;&lt;span class="k"&gt;echo&lt;/span&gt; Applying migrations&lt;/div&gt;&lt;div class="line" id="LC9"&gt;..\\Libs\\Migrator\\Migrator.Console SqlServer &lt;span class="nv"&gt;%connStr%&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;..\\MyProject.Migrations\\Bin\\Debug\\MyProject.Migrations.dll&amp;quot;&lt;/span&gt; -trace&lt;/div&gt;&lt;div class="line" id="LC10"&gt;&lt;br/&gt;&lt;/div&gt;&lt;div class="line" id="LC11"&gt;&lt;span class="c"&gt;REM If you only have Windows SDK 6 then change the path in top to &amp;quot;%programfiles%\\Microsoft SDKs\\Windows\\v6.0A\\Bin&amp;quot;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC12"&gt;&lt;span class="k"&gt;echo&lt;/span&gt; Regenerating DBML&lt;/div&gt;&lt;div class="line" id="LC13"&gt;sqlmetal &lt;span class="n"&gt;/conn:%connStr%&lt;/span&gt; &lt;span class="n"&gt;/dbml:MyDB.dbml&lt;/span&gt; &lt;span class="n"&gt;/namespace:MyProject.Data.Entities&lt;/span&gt; &lt;span class="n"&gt;/context:MyDBDataContext&lt;/span&gt; &lt;span class="n"&gt;/functions&lt;/span&gt; &lt;/div&gt;&lt;div class="line" id="LC14"&gt;&lt;br/&gt;&lt;/div&gt;&lt;div class="line" id="LC15"&gt;&lt;span class="c"&gt;REM Download msxsl.exe from http://www.microsoft.com/downloads/details.aspx?familyid=2fb55371-c94e-4373-b0e9-db4816552e41&amp;amp;displaylang=en&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC16"&gt;&lt;span class="k"&gt;echo&lt;/span&gt; Applying XSLT to DBML and copying to destination&lt;/div&gt;&lt;div class="line" id="LC17"&gt;msxsl MyDB.dbml MyDB.xslt -o ..\\MyProject.Data\\Entities\\MyDB.dbml&lt;/div&gt;&lt;div class="line" id="LC18"&gt;&lt;br/&gt;&lt;/div&gt;&lt;div class="line" id="LC19"&gt;&lt;span class="c"&gt;REM Download L2ST4 from http://l2st4.codeplex.com/&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC20"&gt;&lt;span class="c"&gt;REM If having trouble with TextTransform, change path in top to to &amp;quot;%CommonProgramFiles(x86)%\\microsoft shared\\TextTemplating\\1.2&amp;quot;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC21"&gt;&lt;span class="k"&gt;echo&lt;/span&gt; Transforming L&lt;span class="m"&gt;2&lt;/span&gt;ST&lt;span class="m"&gt;4&lt;/span&gt; template&lt;/div&gt;&lt;div class="line" id="LC22"&gt;TextTransform ..\\MyProject.Data\\Entities\\MyDB.tt&lt;/div&gt;&lt;div class="line" id="LC23"&gt;&lt;br/&gt;&lt;/div&gt;&lt;div class="line" id="LC24"&gt;&lt;span class="k"&gt;echo&lt;/span&gt; Done&lt;/div&gt;&lt;div class="line" id="LC25"&gt;&lt;span class="k"&gt;endlocal&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC26"&gt;&lt;br/&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt;
          &lt;/div&gt;

          &lt;div class="gist-meta"&gt;
            &lt;a href="https://gist.github.com/raw/414291/077f1ff253c54c52db899bf4f24aeaa6b16d7810/MigrateAndGenerateContext.cmd" style="float:right;"&gt;view raw&lt;/a&gt;
            &lt;a href="https://gist.github.com/414291#file_migrate_and_generate_context.cmd" style="float:right;margin-right:10px;color:#666"&gt;MigrateAndGenerateContext.cmd&lt;/a&gt;
            &lt;a href="https://gist.github.com/414291"&gt;This Gist&lt;/a&gt; brought to you by &lt;a href="http://github.com"&gt;GitHub&lt;/a&gt;.
          &lt;/div&gt;
        &lt;/div&gt;

        &lt;div class="gist-file"&gt;
          &lt;div class="gist-data gist-syntax"&gt;
              &lt;div class="gist-highlight"&gt;&lt;pre&gt;&lt;div class="line" id="LC1"&gt;&lt;span class="cp"&gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC2"&gt;&lt;span class="nt"&gt;&amp;lt;xsl:stylesheet&lt;/span&gt; &lt;span class="na"&gt;version=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;1.0&amp;quot;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC3"&gt;	&lt;span class="na"&gt;xmlns:dbml=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;http://schemas.microsoft.com/linqtosql/dbml/2007&amp;quot;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC4"&gt;	&lt;span class="na"&gt;xmlns:xsl=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC5"&gt;	&lt;span class="na"&gt;xmlns:msxsl=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;urn:schemas-microsoft-com:xslt&amp;quot;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC6"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="na"&gt;xmlns:user=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;urn:script-items&amp;quot;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC7"&gt;	&lt;span class="na"&gt;exclude-result-prefixes=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;msxsl dbml user&amp;quot;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC8"&gt;&amp;nbsp;&amp;nbsp;&lt;span class="nt"&gt;&amp;lt;xsl:output&lt;/span&gt; &lt;span class="na"&gt;method=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;xml&amp;quot;&lt;/span&gt; &lt;span class="na"&gt;indent=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;yes&amp;quot;&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC9"&gt;&lt;br/&gt;&lt;/div&gt;&lt;div class="line" id="LC10"&gt;&amp;nbsp;&amp;nbsp;&lt;span class="c"&gt;&amp;lt;!-- By default copy all nodes an attributes --&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC11"&gt;&amp;nbsp;&amp;nbsp;&lt;span class="nt"&gt;&amp;lt;xsl:template&lt;/span&gt; &lt;span class="na"&gt;match=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;@*|node()&amp;quot;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC12"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="nt"&gt;&amp;lt;xsl:copy&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC13"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="nt"&gt;&amp;lt;xsl:apply&lt;/span&gt;&lt;span class="na"&gt;-templates&lt;/span&gt; &lt;span class="na"&gt;select=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;@*|node()&amp;quot;&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC14"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="nt"&gt;&amp;lt;/xsl:copy&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC15"&gt;&amp;nbsp;&amp;nbsp;&lt;span class="nt"&gt;&amp;lt;/xsl:template&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC16"&gt;&lt;br/&gt;&lt;/div&gt;&lt;div class="line" id="LC17"&gt;&amp;nbsp;&amp;nbsp;&lt;span class="c"&gt;&amp;lt;!-- You probably don&amp;#39;t want an Entity for the SchemaInfo table which Migrator will add&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC18"&gt;&lt;span class="c"&gt;       This is how you hide a table &lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC19"&gt;&lt;span class="c"&gt;  --&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC20"&gt;&amp;nbsp;&amp;nbsp;&lt;span class="nt"&gt;&amp;lt;xsl:template&lt;/span&gt; &lt;span class="na"&gt;match=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;//dbml:Table[@Name=&amp;#39;dbo.SchemaInfo&amp;#39;]&amp;quot;&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC21"&gt;&lt;br/&gt;&lt;/div&gt;&lt;div class="line" id="LC22"&gt;&amp;nbsp;&amp;nbsp;&lt;span class="c"&gt;&amp;lt;!-- Replace a column with a Enum.&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC23"&gt;&lt;span class="c"&gt;       The column in the MyTable table is called TypeEnum. &lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC24"&gt;&lt;span class="c"&gt;       The Enum defined in my project is called &amp;quot;MyEnum&amp;quot;.&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC25"&gt;&lt;span class="c"&gt;       I replace the name &amp;quot;TypeEnum&amp;quot; with &amp;quot;Type&amp;quot;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC26"&gt;&lt;span class="c"&gt;  --&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC27"&gt;&amp;nbsp;&amp;nbsp;&lt;span class="nt"&gt;&amp;lt;xsl:template&lt;/span&gt; &lt;span class="na"&gt;match=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;//dbml:Type[@Name = &amp;#39;MyTable&amp;#39;]/dbml:Column[@Name = &amp;#39;TypeEnum&amp;#39;]&amp;quot;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC28"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="nt"&gt;&amp;lt;xsl:copy&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC29"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="nt"&gt;&amp;lt;xsl:apply&lt;/span&gt;&lt;span class="na"&gt;-templates&lt;/span&gt; &lt;span class="na"&gt;select=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;@* | node()&amp;quot;&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC30"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="nt"&gt;&amp;lt;xsl:attribute&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Type&amp;quot;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;MyEnum&lt;span class="nt"&gt;&amp;lt;/xsl:attribute&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC31"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="nt"&gt;&amp;lt;xsl:attribute&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Member&amp;quot;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Type&lt;span class="nt"&gt;&amp;lt;/xsl:attribute&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC32"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="nt"&gt;&amp;lt;/xsl:copy&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC33"&gt;&amp;nbsp;&amp;nbsp;&lt;span class="nt"&gt;&amp;lt;/xsl:template&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC34"&gt;&amp;nbsp;&amp;nbsp;&lt;/div&gt;&lt;div class="line" id="LC35"&gt;&amp;nbsp;&amp;nbsp;&lt;span class="c"&gt;&amp;lt;!-- SqlMetal has a bug &lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC36"&gt;&lt;span class="c"&gt;       (http://connect.microsoft.com/VisualStudio/feedback/details/486598/sqlmetal-generates-incorrectly-capitalized-identifiers)&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC37"&gt;&lt;span class="c"&gt;       which this code will resolve, only needed if you have non ascii characters in you table or column names.&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC38"&gt;&lt;span class="c"&gt;       But then you need a better MSXSL.exe: http://www.codeproject.com/KB/XML/msxslplus.aspx&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC39"&gt;&lt;span class="c"&gt;  --&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC40"&gt;&amp;nbsp;&amp;nbsp;&lt;span class="c"&gt;&amp;lt;!--&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC41"&gt;&lt;span class="c"&gt;  &amp;lt;xsl:template match=&amp;quot;@Name&amp;quot;&amp;gt;    &lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC42"&gt;&lt;span class="c"&gt;    &amp;lt;xsl:attribute name=&amp;quot;Name&amp;quot;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC43"&gt;&lt;span class="c"&gt;      &amp;lt;xsl:value-of select=&amp;quot;user:FixCasing(.)&amp;quot;/&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC44"&gt;&lt;span class="c"&gt;    &amp;lt;/xsl:attribute&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC45"&gt;&lt;span class="c"&gt;  &amp;lt;/xsl:template&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC46"&gt;&lt;span class="c"&gt;  &amp;lt;xsl:template match=&amp;quot;@Member&amp;quot;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC47"&gt;&lt;span class="c"&gt;    &amp;lt;xsl:attribute name=&amp;quot;Member&amp;quot;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC48"&gt;&lt;span class="c"&gt;      &amp;lt;xsl:value-of select=&amp;quot;user:FixCasing(.)&amp;quot;/&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC49"&gt;&lt;span class="c"&gt;    &amp;lt;/xsl:attribute&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC50"&gt;&lt;span class="c"&gt;  &amp;lt;/xsl:template&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC51"&gt;&lt;span class="c"&gt;  &amp;lt;xsl:template match=&amp;quot;@Type&amp;quot;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC52"&gt;&lt;span class="c"&gt;    &amp;lt;xsl:attribute name=&amp;quot;Type&amp;quot;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC53"&gt;&lt;span class="c"&gt;      &amp;lt;xsl:value-of select=&amp;quot;user:FixCasing(.)&amp;quot;/&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC54"&gt;&lt;span class="c"&gt;    &amp;lt;/xsl:attribute&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC55"&gt;&lt;span class="c"&gt;  &amp;lt;/xsl:template&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC56"&gt;&lt;span class="c"&gt;  &amp;lt;xsl:template match=&amp;quot;@ThisKey&amp;quot;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC57"&gt;&lt;span class="c"&gt;    &amp;lt;xsl:attribute name=&amp;quot;ThisKey&amp;quot;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC58"&gt;&lt;span class="c"&gt;      &amp;lt;xsl:value-of select=&amp;quot;user:FixCasing(.)&amp;quot;/&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC59"&gt;&lt;span class="c"&gt;    &amp;lt;/xsl:attribute&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC60"&gt;&lt;span class="c"&gt;  &amp;lt;/xsl:template&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC61"&gt;&lt;span class="c"&gt;  &amp;lt;xsl:template match=&amp;quot;@OtherKey&amp;quot;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC62"&gt;&lt;span class="c"&gt;    &amp;lt;xsl:attribute name=&amp;quot;OtherKey&amp;quot;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC63"&gt;&lt;span class="c"&gt;      &amp;lt;xsl:value-of select=&amp;quot;user:FixCasing(.)&amp;quot;/&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC64"&gt;&lt;span class="c"&gt;    &amp;lt;/xsl:attribute&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC65"&gt;&lt;span class="c"&gt;  &amp;lt;/xsl:template&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC66"&gt;&lt;br/&gt;&lt;/div&gt;&lt;div class="line" id="LC67"&gt;&lt;span class="c"&gt;  &amp;lt;msxsl:script language=&amp;quot;C#&amp;quot; implements-prefix=&amp;quot;user&amp;quot;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC68"&gt;&lt;span class="c"&gt;    &amp;lt;![CDATA[&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC69"&gt;&lt;span class="c"&gt;    public string FixCasing(string str)&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC70"&gt;&lt;span class="c"&gt;    {&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC71"&gt;&lt;span class="c"&gt;      char[] chars = str.ToCharArray();&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC72"&gt;&lt;span class="c"&gt;      &lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC73"&gt;&lt;span class="c"&gt;      for (int i = 0; i &amp;lt; chars.Length - 1; i++)&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC74"&gt;&lt;span class="c"&gt;        // Add your troubling characters&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC75"&gt;&lt;span class="c"&gt;        if ((chars[i] == &amp;#39;å&amp;#39; || chars[i] == &amp;#39;ä&amp;#39; || chars[i] == &amp;#39;ö&amp;#39; || chars[i] == &amp;#39;Å&amp;#39; || chars[i] == &amp;#39;Ä&amp;#39; || chars[i] == &amp;#39;Ö&amp;#39;) &amp;amp;&amp;amp; char.IsLetter(chars[i + 1]))&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC76"&gt;&lt;span class="c"&gt;          chars[i + 1] = char.ToLower(chars[i + 1]);&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC77"&gt;&lt;br/&gt;&lt;/div&gt;&lt;div class="line" id="LC78"&gt;&lt;span class="c"&gt;      return new string(chars);&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC79"&gt;&lt;span class="c"&gt;    }&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC80"&gt;&lt;span class="c"&gt;    ]]&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC81"&gt;&lt;span class="c"&gt;  &amp;lt;/msxsl:script&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC82"&gt;&lt;span class="c"&gt;  --&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC83"&gt;&lt;span class="nt"&gt;&amp;lt;/xsl:stylesheet&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC84"&gt;&lt;br/&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt;
          &lt;/div&gt;

          &lt;div class="gist-meta"&gt;
            &lt;a href="https://gist.github.com/raw/414291/d6da1e2612247fbf2e6b893a48aa29c77981e115/MyDB.xslt" style="float:right;"&gt;view raw&lt;/a&gt;
            &lt;a href="https://gist.github.com/414291#file_my_db.xslt" style="float:right;margin-right:10px;color:#666"&gt;MyDB.xslt&lt;/a&gt;
            &lt;a href="https://gist.github.com/414291"&gt;This Gist&lt;/a&gt; brought to you by &lt;a href="http://github.com"&gt;GitHub&lt;/a&gt;.
          &lt;/div&gt;
        &lt;/div&gt;
&lt;/div&gt;

#file_migrate_and_generate_context.cmd"&gt;MigrateAndGenerateContext.cmd&lt;/a&gt; and &lt;a href="&lt;link rel="stylesheet" href="https://gist.github.com/stylesheets/gist/embed.css"/&gt;

&lt;div id="gist-414291" class="gist"&gt;

        &lt;div class="gist-file"&gt;
          &lt;div class="gist-data gist-syntax"&gt;
              &lt;div class="gist-highlight"&gt;&lt;pre&gt;&lt;div class="line" id="LC1"&gt;&lt;span class="p"&gt;@&lt;/span&gt;&lt;span class="k"&gt;echo&lt;/span&gt; &lt;span class="k"&gt;off&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC2"&gt;&lt;span class="k"&gt;setlocal&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC3"&gt;&lt;span class="k"&gt;set&lt;/span&gt; &lt;span class="nv"&gt;path&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;%CommonProgramFiles(x86)%\\microsoft shared\\TextTemplating\\10.0&amp;quot;&lt;/span&gt;;&lt;span class="s2"&gt;&amp;quot;%ProgramFiles(x86)%\\Microsoft SDKs\\Windows\\v7.0A\\Bin\\NETFX 4.0 Tools&amp;quot;&lt;/span&gt;;&lt;span class="nv"&gt;%path%&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC4"&gt;&lt;br/&gt;&lt;/div&gt;&lt;div class="line" id="LC5"&gt;&lt;span class="k"&gt;set&lt;/span&gt; &lt;span class="nv"&gt;connStr&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Data Source=.\\SQLEXPRESS;Initial Catalog=MyDB;Integrated Security=true&amp;quot;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC6"&gt;&lt;br/&gt;&lt;/div&gt;&lt;div class="line" id="LC7"&gt;&lt;span class="c"&gt;REM Download MigratorDotNet from http://code.google.com/p/migratordotnet/&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC8"&gt;&lt;span class="k"&gt;echo&lt;/span&gt; Applying migrations&lt;/div&gt;&lt;div class="line" id="LC9"&gt;..\\Libs\\Migrator\\Migrator.Console SqlServer &lt;span class="nv"&gt;%connStr%&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;..\\MyProject.Migrations\\Bin\\Debug\\MyProject.Migrations.dll&amp;quot;&lt;/span&gt; -trace&lt;/div&gt;&lt;div class="line" id="LC10"&gt;&lt;br/&gt;&lt;/div&gt;&lt;div class="line" id="LC11"&gt;&lt;span class="c"&gt;REM If you only have Windows SDK 6 then change the path in top to &amp;quot;%programfiles%\\Microsoft SDKs\\Windows\\v6.0A\\Bin&amp;quot;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC12"&gt;&lt;span class="k"&gt;echo&lt;/span&gt; Regenerating DBML&lt;/div&gt;&lt;div class="line" id="LC13"&gt;sqlmetal &lt;span class="n"&gt;/conn:%connStr%&lt;/span&gt; &lt;span class="n"&gt;/dbml:MyDB.dbml&lt;/span&gt; &lt;span class="n"&gt;/namespace:MyProject.Data.Entities&lt;/span&gt; &lt;span class="n"&gt;/context:MyDBDataContext&lt;/span&gt; &lt;span class="n"&gt;/functions&lt;/span&gt; &lt;/div&gt;&lt;div class="line" id="LC14"&gt;&lt;br/&gt;&lt;/div&gt;&lt;div class="line" id="LC15"&gt;&lt;span class="c"&gt;REM Download msxsl.exe from http://www.microsoft.com/downloads/details.aspx?familyid=2fb55371-c94e-4373-b0e9-db4816552e41&amp;amp;displaylang=en&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC16"&gt;&lt;span class="k"&gt;echo&lt;/span&gt; Applying XSLT to DBML and copying to destination&lt;/div&gt;&lt;div class="line" id="LC17"&gt;msxsl MyDB.dbml MyDB.xslt -o ..\\MyProject.Data\\Entities\\MyDB.dbml&lt;/div&gt;&lt;div class="line" id="LC18"&gt;&lt;br/&gt;&lt;/div&gt;&lt;div class="line" id="LC19"&gt;&lt;span class="c"&gt;REM Download L2ST4 from http://l2st4.codeplex.com/&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC20"&gt;&lt;span class="c"&gt;REM If having trouble with TextTransform, change path in top to to &amp;quot;%CommonProgramFiles(x86)%\\microsoft shared\\TextTemplating\\1.2&amp;quot;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC21"&gt;&lt;span class="k"&gt;echo&lt;/span&gt; Transforming L&lt;span class="m"&gt;2&lt;/span&gt;ST&lt;span class="m"&gt;4&lt;/span&gt; template&lt;/div&gt;&lt;div class="line" id="LC22"&gt;TextTransform ..\\MyProject.Data\\Entities\\MyDB.tt&lt;/div&gt;&lt;div class="line" id="LC23"&gt;&lt;br/&gt;&lt;/div&gt;&lt;div class="line" id="LC24"&gt;&lt;span class="k"&gt;echo&lt;/span&gt; Done&lt;/div&gt;&lt;div class="line" id="LC25"&gt;&lt;span class="k"&gt;endlocal&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC26"&gt;&lt;br/&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt;
          &lt;/div&gt;

          &lt;div class="gist-meta"&gt;
            &lt;a href="https://gist.github.com/raw/414291/077f1ff253c54c52db899bf4f24aeaa6b16d7810/MigrateAndGenerateContext.cmd" style="float:right;"&gt;view raw&lt;/a&gt;
            &lt;a href="https://gist.github.com/414291#file_migrate_and_generate_context.cmd" style="float:right;margin-right:10px;color:#666"&gt;MigrateAndGenerateContext.cmd&lt;/a&gt;
            &lt;a href="https://gist.github.com/414291"&gt;This Gist&lt;/a&gt; brought to you by &lt;a href="http://github.com"&gt;GitHub&lt;/a&gt;.
          &lt;/div&gt;
        &lt;/div&gt;

        &lt;div class="gist-file"&gt;
          &lt;div class="gist-data gist-syntax"&gt;
              &lt;div class="gist-highlight"&gt;&lt;pre&gt;&lt;div class="line" id="LC1"&gt;&lt;span class="cp"&gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC2"&gt;&lt;span class="nt"&gt;&amp;lt;xsl:stylesheet&lt;/span&gt; &lt;span class="na"&gt;version=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;1.0&amp;quot;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC3"&gt;	&lt;span class="na"&gt;xmlns:dbml=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;http://schemas.microsoft.com/linqtosql/dbml/2007&amp;quot;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC4"&gt;	&lt;span class="na"&gt;xmlns:xsl=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC5"&gt;	&lt;span class="na"&gt;xmlns:msxsl=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;urn:schemas-microsoft-com:xslt&amp;quot;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC6"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="na"&gt;xmlns:user=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;urn:script-items&amp;quot;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC7"&gt;	&lt;span class="na"&gt;exclude-result-prefixes=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;msxsl dbml user&amp;quot;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC8"&gt;&amp;nbsp;&amp;nbsp;&lt;span class="nt"&gt;&amp;lt;xsl:output&lt;/span&gt; &lt;span class="na"&gt;method=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;xml&amp;quot;&lt;/span&gt; &lt;span class="na"&gt;indent=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;yes&amp;quot;&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC9"&gt;&lt;br/&gt;&lt;/div&gt;&lt;div class="line" id="LC10"&gt;&amp;nbsp;&amp;nbsp;&lt;span class="c"&gt;&amp;lt;!-- By default copy all nodes an attributes --&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC11"&gt;&amp;nbsp;&amp;nbsp;&lt;span class="nt"&gt;&amp;lt;xsl:template&lt;/span&gt; &lt;span class="na"&gt;match=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;@*|node()&amp;quot;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC12"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="nt"&gt;&amp;lt;xsl:copy&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC13"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="nt"&gt;&amp;lt;xsl:apply&lt;/span&gt;&lt;span class="na"&gt;-templates&lt;/span&gt; &lt;span class="na"&gt;select=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;@*|node()&amp;quot;&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC14"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="nt"&gt;&amp;lt;/xsl:copy&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC15"&gt;&amp;nbsp;&amp;nbsp;&lt;span class="nt"&gt;&amp;lt;/xsl:template&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC16"&gt;&lt;br/&gt;&lt;/div&gt;&lt;div class="line" id="LC17"&gt;&amp;nbsp;&amp;nbsp;&lt;span class="c"&gt;&amp;lt;!-- You probably don&amp;#39;t want an Entity for the SchemaInfo table which Migrator will add&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC18"&gt;&lt;span class="c"&gt;       This is how you hide a table &lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC19"&gt;&lt;span class="c"&gt;  --&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC20"&gt;&amp;nbsp;&amp;nbsp;&lt;span class="nt"&gt;&amp;lt;xsl:template&lt;/span&gt; &lt;span class="na"&gt;match=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;//dbml:Table[@Name=&amp;#39;dbo.SchemaInfo&amp;#39;]&amp;quot;&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC21"&gt;&lt;br/&gt;&lt;/div&gt;&lt;div class="line" id="LC22"&gt;&amp;nbsp;&amp;nbsp;&lt;span class="c"&gt;&amp;lt;!-- Replace a column with a Enum.&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC23"&gt;&lt;span class="c"&gt;       The column in the MyTable table is called TypeEnum. &lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC24"&gt;&lt;span class="c"&gt;       The Enum defined in my project is called &amp;quot;MyEnum&amp;quot;.&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC25"&gt;&lt;span class="c"&gt;       I replace the name &amp;quot;TypeEnum&amp;quot; with &amp;quot;Type&amp;quot;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC26"&gt;&lt;span class="c"&gt;  --&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC27"&gt;&amp;nbsp;&amp;nbsp;&lt;span class="nt"&gt;&amp;lt;xsl:template&lt;/span&gt; &lt;span class="na"&gt;match=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;//dbml:Type[@Name = &amp;#39;MyTable&amp;#39;]/dbml:Column[@Name = &amp;#39;TypeEnum&amp;#39;]&amp;quot;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC28"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="nt"&gt;&amp;lt;xsl:copy&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC29"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="nt"&gt;&amp;lt;xsl:apply&lt;/span&gt;&lt;span class="na"&gt;-templates&lt;/span&gt; &lt;span class="na"&gt;select=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;@* | node()&amp;quot;&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC30"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="nt"&gt;&amp;lt;xsl:attribute&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Type&amp;quot;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;MyEnum&lt;span class="nt"&gt;&amp;lt;/xsl:attribute&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC31"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="nt"&gt;&amp;lt;xsl:attribute&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Member&amp;quot;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Type&lt;span class="nt"&gt;&amp;lt;/xsl:attribute&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC32"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="nt"&gt;&amp;lt;/xsl:copy&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC33"&gt;&amp;nbsp;&amp;nbsp;&lt;span class="nt"&gt;&amp;lt;/xsl:template&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC34"&gt;&amp;nbsp;&amp;nbsp;&lt;/div&gt;&lt;div class="line" id="LC35"&gt;&amp;nbsp;&amp;nbsp;&lt;span class="c"&gt;&amp;lt;!-- SqlMetal has a bug &lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC36"&gt;&lt;span class="c"&gt;       (http://connect.microsoft.com/VisualStudio/feedback/details/486598/sqlmetal-generates-incorrectly-capitalized-identifiers)&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC37"&gt;&lt;span class="c"&gt;       which this code will resolve, only needed if you have non ascii characters in you table or column names.&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC38"&gt;&lt;span class="c"&gt;       But then you need a better MSXSL.exe: http://www.codeproject.com/KB/XML/msxslplus.aspx&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC39"&gt;&lt;span class="c"&gt;  --&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC40"&gt;&amp;nbsp;&amp;nbsp;&lt;span class="c"&gt;&amp;lt;!--&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC41"&gt;&lt;span class="c"&gt;  &amp;lt;xsl:template match=&amp;quot;@Name&amp;quot;&amp;gt;    &lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC42"&gt;&lt;span class="c"&gt;    &amp;lt;xsl:attribute name=&amp;quot;Name&amp;quot;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC43"&gt;&lt;span class="c"&gt;      &amp;lt;xsl:value-of select=&amp;quot;user:FixCasing(.)&amp;quot;/&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC44"&gt;&lt;span class="c"&gt;    &amp;lt;/xsl:attribute&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC45"&gt;&lt;span class="c"&gt;  &amp;lt;/xsl:template&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC46"&gt;&lt;span class="c"&gt;  &amp;lt;xsl:template match=&amp;quot;@Member&amp;quot;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC47"&gt;&lt;span class="c"&gt;    &amp;lt;xsl:attribute name=&amp;quot;Member&amp;quot;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC48"&gt;&lt;span class="c"&gt;      &amp;lt;xsl:value-of select=&amp;quot;user:FixCasing(.)&amp;quot;/&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC49"&gt;&lt;span class="c"&gt;    &amp;lt;/xsl:attribute&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC50"&gt;&lt;span class="c"&gt;  &amp;lt;/xsl:template&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC51"&gt;&lt;span class="c"&gt;  &amp;lt;xsl:template match=&amp;quot;@Type&amp;quot;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC52"&gt;&lt;span class="c"&gt;    &amp;lt;xsl:attribute name=&amp;quot;Type&amp;quot;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC53"&gt;&lt;span class="c"&gt;      &amp;lt;xsl:value-of select=&amp;quot;user:FixCasing(.)&amp;quot;/&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC54"&gt;&lt;span class="c"&gt;    &amp;lt;/xsl:attribute&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC55"&gt;&lt;span class="c"&gt;  &amp;lt;/xsl:template&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC56"&gt;&lt;span class="c"&gt;  &amp;lt;xsl:template match=&amp;quot;@ThisKey&amp;quot;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC57"&gt;&lt;span class="c"&gt;    &amp;lt;xsl:attribute name=&amp;quot;ThisKey&amp;quot;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC58"&gt;&lt;span class="c"&gt;      &amp;lt;xsl:value-of select=&amp;quot;user:FixCasing(.)&amp;quot;/&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC59"&gt;&lt;span class="c"&gt;    &amp;lt;/xsl:attribute&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC60"&gt;&lt;span class="c"&gt;  &amp;lt;/xsl:template&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC61"&gt;&lt;span class="c"&gt;  &amp;lt;xsl:template match=&amp;quot;@OtherKey&amp;quot;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC62"&gt;&lt;span class="c"&gt;    &amp;lt;xsl:attribute name=&amp;quot;OtherKey&amp;quot;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC63"&gt;&lt;span class="c"&gt;      &amp;lt;xsl:value-of select=&amp;quot;user:FixCasing(.)&amp;quot;/&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC64"&gt;&lt;span class="c"&gt;    &amp;lt;/xsl:attribute&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC65"&gt;&lt;span class="c"&gt;  &amp;lt;/xsl:template&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC66"&gt;&lt;br/&gt;&lt;/div&gt;&lt;div class="line" id="LC67"&gt;&lt;span class="c"&gt;  &amp;lt;msxsl:script language=&amp;quot;C#&amp;quot; implements-prefix=&amp;quot;user&amp;quot;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC68"&gt;&lt;span class="c"&gt;    &amp;lt;![CDATA[&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC69"&gt;&lt;span class="c"&gt;    public string FixCasing(string str)&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC70"&gt;&lt;span class="c"&gt;    {&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC71"&gt;&lt;span class="c"&gt;      char[] chars = str.ToCharArray();&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC72"&gt;&lt;span class="c"&gt;      &lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC73"&gt;&lt;span class="c"&gt;      for (int i = 0; i &amp;lt; chars.Length - 1; i++)&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC74"&gt;&lt;span class="c"&gt;        // Add your troubling characters&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC75"&gt;&lt;span class="c"&gt;        if ((chars[i] == &amp;#39;å&amp;#39; || chars[i] == &amp;#39;ä&amp;#39; || chars[i] == &amp;#39;ö&amp;#39; || chars[i] == &amp;#39;Å&amp;#39; || chars[i] == &amp;#39;Ä&amp;#39; || chars[i] == &amp;#39;Ö&amp;#39;) &amp;amp;&amp;amp; char.IsLetter(chars[i + 1]))&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC76"&gt;&lt;span class="c"&gt;          chars[i + 1] = char.ToLower(chars[i + 1]);&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC77"&gt;&lt;br/&gt;&lt;/div&gt;&lt;div class="line" id="LC78"&gt;&lt;span class="c"&gt;      return new string(chars);&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC79"&gt;&lt;span class="c"&gt;    }&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC80"&gt;&lt;span class="c"&gt;    ]]&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC81"&gt;&lt;span class="c"&gt;  &amp;lt;/msxsl:script&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC82"&gt;&lt;span class="c"&gt;  --&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC83"&gt;&lt;span class="nt"&gt;&amp;lt;/xsl:stylesheet&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC84"&gt;&lt;br/&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt;
          &lt;/div&gt;

          &lt;div class="gist-meta"&gt;
            &lt;a href="https://gist.github.com/raw/414291/d6da1e2612247fbf2e6b893a48aa29c77981e115/MyDB.xslt" style="float:right;"&gt;view raw&lt;/a&gt;
            &lt;a href="https://gist.github.com/414291#file_my_db.xslt" style="float:right;margin-right:10px;color:#666"&gt;MyDB.xslt&lt;/a&gt;
            &lt;a href="https://gist.github.com/414291"&gt;This Gist&lt;/a&gt; brought to you by &lt;a href="http://github.com"&gt;GitHub&lt;/a&gt;.
          &lt;/div&gt;
        &lt;/div&gt;
&lt;/div&gt;

#file_my_db.xslt"&gt;MyDB.xslt&lt;/a&gt; from the code samples below to your solution and run the cmd (&lt;a href="http://www.rickglos.com/post/2008/02/How-to-run-cmd-files-from-Visual-Studio.aspx"&gt;here is a solution how to run .cmd files from within VS&lt;/a&gt;). What it will do is to apply your migrations, eg. Add tables, rename columns etc., then generate a new .dbml file using &lt;a href="http://msdn.microsoft.com/en-us/library/bb386987.aspx"&gt;SqlMetal&lt;/a&gt;, then the XSLT will transform the .dbml (which simply is a XML file) and it will apply your changes like replacing some columns with your Enums or hiding some tables you don't want classes for. You need a Xslt transformer for that step to work, you can &lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=2fb55371-c94e-4373-b0e9-db4816552e41&amp;displaylang=en"&gt;download msxsl.exe from Microsoft&lt;/a&gt; or a version which can &lt;a href="http://www.codeproject.com/KB/XML/msxslplus.aspx"&gt;do inline scripts from here&lt;/a&gt;, which you need if you want to take use of the &lt;a href="http://connect.microsoft.com/VisualStudio/feedback/details/486598/sqlmetal-generates-incorrectly-capitalized-identifiers"&gt;SqlMetal bug&lt;/a&gt;fix i've supplied in the xslt. At last the script will automatically run the L2ST4 template and generate the new datacontext and entities, all without manual/error prone interaction.&lt;/p&gt;

&lt;p&gt;Done! You've changed your database schema and regenerated the correct datacontext and entities with one code change and one click!&lt;/p&gt;

&lt;p&gt;Now all the changes you've done is applied at your developer machine, now add the Migrator.Console.exe part to your deploy script and then your live database will be updated automatically. No more tedious executing .sql files manually or keeping track of which .sql file is applied or not!&lt;/p&gt;

&lt;p&gt;&lt;link rel="stylesheet" href="https://gist.github.com/stylesheets/gist/embed.css"/&gt;

&lt;div id="gist-414291" class="gist"&gt;

        &lt;div class="gist-file"&gt;
          &lt;div class="gist-data gist-syntax"&gt;
              &lt;div class="gist-highlight"&gt;&lt;pre&gt;&lt;div class="line" id="LC1"&gt;&lt;span class="p"&gt;@&lt;/span&gt;&lt;span class="k"&gt;echo&lt;/span&gt; &lt;span class="k"&gt;off&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC2"&gt;&lt;span class="k"&gt;setlocal&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC3"&gt;&lt;span class="k"&gt;set&lt;/span&gt; &lt;span class="nv"&gt;path&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;%CommonProgramFiles(x86)%\\microsoft shared\\TextTemplating\\10.0&amp;quot;&lt;/span&gt;;&lt;span class="s2"&gt;&amp;quot;%ProgramFiles(x86)%\\Microsoft SDKs\\Windows\\v7.0A\\Bin\\NETFX 4.0 Tools&amp;quot;&lt;/span&gt;;&lt;span class="nv"&gt;%path%&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC4"&gt;&lt;br/&gt;&lt;/div&gt;&lt;div class="line" id="LC5"&gt;&lt;span class="k"&gt;set&lt;/span&gt; &lt;span class="nv"&gt;connStr&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Data Source=.\\SQLEXPRESS;Initial Catalog=MyDB;Integrated Security=true&amp;quot;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC6"&gt;&lt;br/&gt;&lt;/div&gt;&lt;div class="line" id="LC7"&gt;&lt;span class="c"&gt;REM Download MigratorDotNet from http://code.google.com/p/migratordotnet/&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC8"&gt;&lt;span class="k"&gt;echo&lt;/span&gt; Applying migrations&lt;/div&gt;&lt;div class="line" id="LC9"&gt;..\\Libs\\Migrator\\Migrator.Console SqlServer &lt;span class="nv"&gt;%connStr%&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;..\\MyProject.Migrations\\Bin\\Debug\\MyProject.Migrations.dll&amp;quot;&lt;/span&gt; -trace&lt;/div&gt;&lt;div class="line" id="LC10"&gt;&lt;br/&gt;&lt;/div&gt;&lt;div class="line" id="LC11"&gt;&lt;span class="c"&gt;REM If you only have Windows SDK 6 then change the path in top to &amp;quot;%programfiles%\\Microsoft SDKs\\Windows\\v6.0A\\Bin&amp;quot;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC12"&gt;&lt;span class="k"&gt;echo&lt;/span&gt; Regenerating DBML&lt;/div&gt;&lt;div class="line" id="LC13"&gt;sqlmetal &lt;span class="n"&gt;/conn:%connStr%&lt;/span&gt; &lt;span class="n"&gt;/dbml:MyDB.dbml&lt;/span&gt; &lt;span class="n"&gt;/namespace:MyProject.Data.Entities&lt;/span&gt; &lt;span class="n"&gt;/context:MyDBDataContext&lt;/span&gt; &lt;span class="n"&gt;/functions&lt;/span&gt; &lt;/div&gt;&lt;div class="line" id="LC14"&gt;&lt;br/&gt;&lt;/div&gt;&lt;div class="line" id="LC15"&gt;&lt;span class="c"&gt;REM Download msxsl.exe from http://www.microsoft.com/downloads/details.aspx?familyid=2fb55371-c94e-4373-b0e9-db4816552e41&amp;amp;displaylang=en&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC16"&gt;&lt;span class="k"&gt;echo&lt;/span&gt; Applying XSLT to DBML and copying to destination&lt;/div&gt;&lt;div class="line" id="LC17"&gt;msxsl MyDB.dbml MyDB.xslt -o ..\\MyProject.Data\\Entities\\MyDB.dbml&lt;/div&gt;&lt;div class="line" id="LC18"&gt;&lt;br/&gt;&lt;/div&gt;&lt;div class="line" id="LC19"&gt;&lt;span class="c"&gt;REM Download L2ST4 from http://l2st4.codeplex.com/&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC20"&gt;&lt;span class="c"&gt;REM If having trouble with TextTransform, change path in top to to &amp;quot;%CommonProgramFiles(x86)%\\microsoft shared\\TextTemplating\\1.2&amp;quot;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC21"&gt;&lt;span class="k"&gt;echo&lt;/span&gt; Transforming L&lt;span class="m"&gt;2&lt;/span&gt;ST&lt;span class="m"&gt;4&lt;/span&gt; template&lt;/div&gt;&lt;div class="line" id="LC22"&gt;TextTransform ..\\MyProject.Data\\Entities\\MyDB.tt&lt;/div&gt;&lt;div class="line" id="LC23"&gt;&lt;br/&gt;&lt;/div&gt;&lt;div class="line" id="LC24"&gt;&lt;span class="k"&gt;echo&lt;/span&gt; Done&lt;/div&gt;&lt;div class="line" id="LC25"&gt;&lt;span class="k"&gt;endlocal&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC26"&gt;&lt;br/&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt;
          &lt;/div&gt;

          &lt;div class="gist-meta"&gt;
            &lt;a href="https://gist.github.com/raw/414291/077f1ff253c54c52db899bf4f24aeaa6b16d7810/MigrateAndGenerateContext.cmd" style="float:right;"&gt;view raw&lt;/a&gt;
            &lt;a href="https://gist.github.com/414291#file_migrate_and_generate_context.cmd" style="float:right;margin-right:10px;color:#666"&gt;MigrateAndGenerateContext.cmd&lt;/a&gt;
            &lt;a href="https://gist.github.com/414291"&gt;This Gist&lt;/a&gt; brought to you by &lt;a href="http://github.com"&gt;GitHub&lt;/a&gt;.
          &lt;/div&gt;
        &lt;/div&gt;

        &lt;div class="gist-file"&gt;
          &lt;div class="gist-data gist-syntax"&gt;
              &lt;div class="gist-highlight"&gt;&lt;pre&gt;&lt;div class="line" id="LC1"&gt;&lt;span class="cp"&gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC2"&gt;&lt;span class="nt"&gt;&amp;lt;xsl:stylesheet&lt;/span&gt; &lt;span class="na"&gt;version=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;1.0&amp;quot;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC3"&gt;	&lt;span class="na"&gt;xmlns:dbml=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;http://schemas.microsoft.com/linqtosql/dbml/2007&amp;quot;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC4"&gt;	&lt;span class="na"&gt;xmlns:xsl=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC5"&gt;	&lt;span class="na"&gt;xmlns:msxsl=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;urn:schemas-microsoft-com:xslt&amp;quot;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC6"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="na"&gt;xmlns:user=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;urn:script-items&amp;quot;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC7"&gt;	&lt;span class="na"&gt;exclude-result-prefixes=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;msxsl dbml user&amp;quot;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC8"&gt;&amp;nbsp;&amp;nbsp;&lt;span class="nt"&gt;&amp;lt;xsl:output&lt;/span&gt; &lt;span class="na"&gt;method=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;xml&amp;quot;&lt;/span&gt; &lt;span class="na"&gt;indent=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;yes&amp;quot;&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC9"&gt;&lt;br/&gt;&lt;/div&gt;&lt;div class="line" id="LC10"&gt;&amp;nbsp;&amp;nbsp;&lt;span class="c"&gt;&amp;lt;!-- By default copy all nodes an attributes --&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC11"&gt;&amp;nbsp;&amp;nbsp;&lt;span class="nt"&gt;&amp;lt;xsl:template&lt;/span&gt; &lt;span class="na"&gt;match=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;@*|node()&amp;quot;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC12"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="nt"&gt;&amp;lt;xsl:copy&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC13"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="nt"&gt;&amp;lt;xsl:apply&lt;/span&gt;&lt;span class="na"&gt;-templates&lt;/span&gt; &lt;span class="na"&gt;select=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;@*|node()&amp;quot;&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC14"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="nt"&gt;&amp;lt;/xsl:copy&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC15"&gt;&amp;nbsp;&amp;nbsp;&lt;span class="nt"&gt;&amp;lt;/xsl:template&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC16"&gt;&lt;br/&gt;&lt;/div&gt;&lt;div class="line" id="LC17"&gt;&amp;nbsp;&amp;nbsp;&lt;span class="c"&gt;&amp;lt;!-- You probably don&amp;#39;t want an Entity for the SchemaInfo table which Migrator will add&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC18"&gt;&lt;span class="c"&gt;       This is how you hide a table &lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC19"&gt;&lt;span class="c"&gt;  --&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC20"&gt;&amp;nbsp;&amp;nbsp;&lt;span class="nt"&gt;&amp;lt;xsl:template&lt;/span&gt; &lt;span class="na"&gt;match=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;//dbml:Table[@Name=&amp;#39;dbo.SchemaInfo&amp;#39;]&amp;quot;&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC21"&gt;&lt;br/&gt;&lt;/div&gt;&lt;div class="line" id="LC22"&gt;&amp;nbsp;&amp;nbsp;&lt;span class="c"&gt;&amp;lt;!-- Replace a column with a Enum.&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC23"&gt;&lt;span class="c"&gt;       The column in the MyTable table is called TypeEnum. &lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC24"&gt;&lt;span class="c"&gt;       The Enum defined in my project is called &amp;quot;MyEnum&amp;quot;.&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC25"&gt;&lt;span class="c"&gt;       I replace the name &amp;quot;TypeEnum&amp;quot; with &amp;quot;Type&amp;quot;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC26"&gt;&lt;span class="c"&gt;  --&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC27"&gt;&amp;nbsp;&amp;nbsp;&lt;span class="nt"&gt;&amp;lt;xsl:template&lt;/span&gt; &lt;span class="na"&gt;match=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;//dbml:Type[@Name = &amp;#39;MyTable&amp;#39;]/dbml:Column[@Name = &amp;#39;TypeEnum&amp;#39;]&amp;quot;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC28"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="nt"&gt;&amp;lt;xsl:copy&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC29"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="nt"&gt;&amp;lt;xsl:apply&lt;/span&gt;&lt;span class="na"&gt;-templates&lt;/span&gt; &lt;span class="na"&gt;select=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;@* | node()&amp;quot;&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC30"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="nt"&gt;&amp;lt;xsl:attribute&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Type&amp;quot;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;MyEnum&lt;span class="nt"&gt;&amp;lt;/xsl:attribute&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC31"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="nt"&gt;&amp;lt;xsl:attribute&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Member&amp;quot;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Type&lt;span class="nt"&gt;&amp;lt;/xsl:attribute&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC32"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="nt"&gt;&amp;lt;/xsl:copy&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC33"&gt;&amp;nbsp;&amp;nbsp;&lt;span class="nt"&gt;&amp;lt;/xsl:template&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC34"&gt;&amp;nbsp;&amp;nbsp;&lt;/div&gt;&lt;div class="line" id="LC35"&gt;&amp;nbsp;&amp;nbsp;&lt;span class="c"&gt;&amp;lt;!-- SqlMetal has a bug &lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC36"&gt;&lt;span class="c"&gt;       (http://connect.microsoft.com/VisualStudio/feedback/details/486598/sqlmetal-generates-incorrectly-capitalized-identifiers)&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC37"&gt;&lt;span class="c"&gt;       which this code will resolve, only needed if you have non ascii characters in you table or column names.&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC38"&gt;&lt;span class="c"&gt;       But then you need a better MSXSL.exe: http://www.codeproject.com/KB/XML/msxslplus.aspx&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC39"&gt;&lt;span class="c"&gt;  --&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC40"&gt;&amp;nbsp;&amp;nbsp;&lt;span class="c"&gt;&amp;lt;!--&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC41"&gt;&lt;span class="c"&gt;  &amp;lt;xsl:template match=&amp;quot;@Name&amp;quot;&amp;gt;    &lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC42"&gt;&lt;span class="c"&gt;    &amp;lt;xsl:attribute name=&amp;quot;Name&amp;quot;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC43"&gt;&lt;span class="c"&gt;      &amp;lt;xsl:value-of select=&amp;quot;user:FixCasing(.)&amp;quot;/&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC44"&gt;&lt;span class="c"&gt;    &amp;lt;/xsl:attribute&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC45"&gt;&lt;span class="c"&gt;  &amp;lt;/xsl:template&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC46"&gt;&lt;span class="c"&gt;  &amp;lt;xsl:template match=&amp;quot;@Member&amp;quot;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC47"&gt;&lt;span class="c"&gt;    &amp;lt;xsl:attribute name=&amp;quot;Member&amp;quot;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC48"&gt;&lt;span class="c"&gt;      &amp;lt;xsl:value-of select=&amp;quot;user:FixCasing(.)&amp;quot;/&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC49"&gt;&lt;span class="c"&gt;    &amp;lt;/xsl:attribute&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC50"&gt;&lt;span class="c"&gt;  &amp;lt;/xsl:template&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC51"&gt;&lt;span class="c"&gt;  &amp;lt;xsl:template match=&amp;quot;@Type&amp;quot;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC52"&gt;&lt;span class="c"&gt;    &amp;lt;xsl:attribute name=&amp;quot;Type&amp;quot;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC53"&gt;&lt;span class="c"&gt;      &amp;lt;xsl:value-of select=&amp;quot;user:FixCasing(.)&amp;quot;/&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC54"&gt;&lt;span class="c"&gt;    &amp;lt;/xsl:attribute&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC55"&gt;&lt;span class="c"&gt;  &amp;lt;/xsl:template&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC56"&gt;&lt;span class="c"&gt;  &amp;lt;xsl:template match=&amp;quot;@ThisKey&amp;quot;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC57"&gt;&lt;span class="c"&gt;    &amp;lt;xsl:attribute name=&amp;quot;ThisKey&amp;quot;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC58"&gt;&lt;span class="c"&gt;      &amp;lt;xsl:value-of select=&amp;quot;user:FixCasing(.)&amp;quot;/&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC59"&gt;&lt;span class="c"&gt;    &amp;lt;/xsl:attribute&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC60"&gt;&lt;span class="c"&gt;  &amp;lt;/xsl:template&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC61"&gt;&lt;span class="c"&gt;  &amp;lt;xsl:template match=&amp;quot;@OtherKey&amp;quot;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC62"&gt;&lt;span class="c"&gt;    &amp;lt;xsl:attribute name=&amp;quot;OtherKey&amp;quot;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC63"&gt;&lt;span class="c"&gt;      &amp;lt;xsl:value-of select=&amp;quot;user:FixCasing(.)&amp;quot;/&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC64"&gt;&lt;span class="c"&gt;    &amp;lt;/xsl:attribute&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC65"&gt;&lt;span class="c"&gt;  &amp;lt;/xsl:template&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC66"&gt;&lt;br/&gt;&lt;/div&gt;&lt;div class="line" id="LC67"&gt;&lt;span class="c"&gt;  &amp;lt;msxsl:script language=&amp;quot;C#&amp;quot; implements-prefix=&amp;quot;user&amp;quot;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC68"&gt;&lt;span class="c"&gt;    &amp;lt;![CDATA[&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC69"&gt;&lt;span class="c"&gt;    public string FixCasing(string str)&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC70"&gt;&lt;span class="c"&gt;    {&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC71"&gt;&lt;span class="c"&gt;      char[] chars = str.ToCharArray();&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC72"&gt;&lt;span class="c"&gt;      &lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC73"&gt;&lt;span class="c"&gt;      for (int i = 0; i &amp;lt; chars.Length - 1; i++)&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC74"&gt;&lt;span class="c"&gt;        // Add your troubling characters&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC75"&gt;&lt;span class="c"&gt;        if ((chars[i] == &amp;#39;å&amp;#39; || chars[i] == &amp;#39;ä&amp;#39; || chars[i] == &amp;#39;ö&amp;#39; || chars[i] == &amp;#39;Å&amp;#39; || chars[i] == &amp;#39;Ä&amp;#39; || chars[i] == &amp;#39;Ö&amp;#39;) &amp;amp;&amp;amp; char.IsLetter(chars[i + 1]))&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC76"&gt;&lt;span class="c"&gt;          chars[i + 1] = char.ToLower(chars[i + 1]);&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC77"&gt;&lt;br/&gt;&lt;/div&gt;&lt;div class="line" id="LC78"&gt;&lt;span class="c"&gt;      return new string(chars);&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC79"&gt;&lt;span class="c"&gt;    }&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC80"&gt;&lt;span class="c"&gt;    ]]&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC81"&gt;&lt;span class="c"&gt;  &amp;lt;/msxsl:script&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC82"&gt;&lt;span class="c"&gt;  --&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC83"&gt;&lt;span class="nt"&gt;&amp;lt;/xsl:stylesheet&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC84"&gt;&lt;br/&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt;
          &lt;/div&gt;

          &lt;div class="gist-meta"&gt;
            &lt;a href="https://gist.github.com/raw/414291/d6da1e2612247fbf2e6b893a48aa29c77981e115/MyDB.xslt" style="float:right;"&gt;view raw&lt;/a&gt;
            &lt;a href="https://gist.github.com/414291#file_my_db.xslt" style="float:right;margin-right:10px;color:#666"&gt;MyDB.xslt&lt;/a&gt;
            &lt;a href="https://gist.github.com/414291"&gt;This Gist&lt;/a&gt; brought to you by &lt;a href="http://github.com"&gt;GitHub&lt;/a&gt;.
          &lt;/div&gt;
        &lt;/div&gt;
&lt;/div&gt;

&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/devcarl?a=eVi1_0MWzNg:d_BkP1aE01s:JX1WZp-3p7k"&gt;&lt;img src="http://feeds.feedburner.com/~ff/devcarl?i=eVi1_0MWzNg:d_BkP1aE01s:JX1WZp-3p7k" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/devcarl/~4/eVi1_0MWzNg" height="1" width="1"/&gt;</description>
      <pubDate>Wed, 26 May 2010 03:44:00 -0700</pubDate>
      <guid isPermaLink="false">http://carlhoerberg.com/efficient-workflow-with-linq-to-sql-using-migrator-t4-and-some-xslt</guid>
    <feedburner:origLink>http://carlhoerberg.com/efficient-workflow-with-linq-to-sql-using-migrator-t4-and-some-xslt</feedburner:origLink></item>
    <item>
      <title>Asp.Net MVC and the Microsoft Chart Controls in .NET 4.0</title>
      <link>http://feedproxy.google.com/~r/devcarl/~3/7j1PAOdaGag/aspnet-mvc-and-the-microsoft-chart-controls-in-net-40</link>
      <description>&lt;p&gt;I'm a big fan of &lt;a href="http://code.msdn.microsoft.com/mschart"&gt;Microsoft Chart Controls&lt;/a&gt;. In .NET 4 the Chart Controls has become a part of the framework so there is not a &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=130F7986-BF49-4FE5-9CA8-910AE6EA442C&amp;displaylang=en"&gt;separate download as to .NET 3.5&lt;/a&gt;. In this post I will show how to integrate them with Asp.Net MVC on .NET 4 because there are some changes from .NET 3.5. Also the most examples on the web suggests that you should output the resulting image directly from the Controller, I will show you how to take use of the full capabilities of Chart Controls and let it render it's own html, including &lt;map&gt;.  Last in the post are all the code examples. &lt;/p&gt;

&lt;p&gt;In .NET 4.0 the Chart Controls are integrated and with the reduced web.config you don't have to add that much stuff, but there is some, most notably the ChartImg.axd handler (see below).&lt;/p&gt;

&lt;p&gt;A new thing quirk in .NET 4.0 is that the ChartImg.axd always will append to your current url. Therefor we need to ignore all urls ending with ChartImg.axd in our routetable. This ignore rule has to be applied before any Area registration, else wise it won't be applied in your Areas. &lt;/p&gt;

&lt;p&gt;The core thing in this solution is that you preserve the Chart object as long as possible, and then let it render it self. That gives us the benefits of all extra html the Chart Control can generate (like imagemap) and image caching. &lt;/p&gt;

&lt;p&gt;&lt;link rel="stylesheet" href="https://gist.github.com/stylesheets/gist/embed.css"/&gt;

&lt;div id="gist-377126" class="gist"&gt;

        &lt;div class="gist-file"&gt;
          &lt;div class="gist-data gist-syntax"&gt;
              &lt;div class="gist-highlight"&gt;&lt;pre&gt;&lt;div class="line" id="LC1"&gt;&lt;span class="nt"&gt;&amp;lt;%@&lt;/span&gt; &lt;span class="n"&gt;Control&lt;/span&gt; &lt;span class="n"&gt;Language&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;C#&amp;quot;&lt;/span&gt; &lt;span class="k"&gt;Inherits&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;System.Web.Mvc.ViewUserControl&amp;lt;System.Web.UI.DataVisualization.Charting.Chart&amp;gt;&amp;quot;&lt;/span&gt; &lt;span class="nt"&gt;%&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC2"&gt;&lt;span class="nt"&gt;&amp;lt;%&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="n"&gt;Model&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Page&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Page&lt;/span&gt;&lt;span class="err"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC4"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="n"&gt;var&lt;/span&gt; &lt;span class="n"&gt;writer&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;HtmlTextWriter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Page&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Output&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="err"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC5"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="n"&gt;Model&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;RenderControl&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;writer&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="err"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC6"&gt;&lt;span class="nt"&gt;%&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt;
          &lt;/div&gt;

          &lt;div class="gist-meta"&gt;
            &lt;a href="https://gist.github.com/raw/377126/73bd95c588f639a1f2108fb3d6ee91cad8ca0c92/Chart.ascx" style="float:right;"&gt;view raw&lt;/a&gt;
            &lt;a href="https://gist.github.com/377126#file_chart.ascx" style="float:right;margin-right:10px;color:#666"&gt;Chart.ascx&lt;/a&gt;
            &lt;a href="https://gist.github.com/377126"&gt;This Gist&lt;/a&gt; brought to you by &lt;a href="http://github.com"&gt;GitHub&lt;/a&gt;.
          &lt;/div&gt;
        &lt;/div&gt;

        &lt;div class="gist-file"&gt;
          &lt;div class="gist-data gist-syntax"&gt;
              &lt;div class="gist-highlight"&gt;&lt;pre&gt;&lt;div class="line" id="LC1"&gt;&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;ChartController&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;Controller&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC2"&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC3"&gt;&amp;nbsp;&amp;nbsp;&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="n"&gt;ActionResult&lt;/span&gt; &lt;span class="nf"&gt;MyChart&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC4"&gt;&amp;nbsp;&amp;nbsp;&lt;span class="p"&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC5"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="n"&gt;var&lt;/span&gt; &lt;span class="n"&gt;chart&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;Chart&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC6"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="c1"&gt;// Configure chart&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC7"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;View&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;chart&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC8"&gt;&amp;nbsp;&amp;nbsp;&lt;span class="p"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC9"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt;
          &lt;/div&gt;

          &lt;div class="gist-meta"&gt;
            &lt;a href="https://gist.github.com/raw/377126/c49dfa3febabd4509508c13a25d1fe9ff377b2bb/ChartController.cs" style="float:right;"&gt;view raw&lt;/a&gt;
            &lt;a href="https://gist.github.com/377126#file_chart_controller.cs" style="float:right;margin-right:10px;color:#666"&gt;ChartController.cs&lt;/a&gt;
            &lt;a href="https://gist.github.com/377126"&gt;This Gist&lt;/a&gt; brought to you by &lt;a href="http://github.com"&gt;GitHub&lt;/a&gt;.
          &lt;/div&gt;
        &lt;/div&gt;

        &lt;div class="gist-file"&gt;
          &lt;div class="gist-data gist-syntax"&gt;
              &lt;div class="gist-highlight"&gt;&lt;pre&gt;&lt;div class="line" id="LC1"&gt;&lt;span class="k"&gt;protected&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;Application_Start&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC2"&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC3"&gt;&amp;nbsp;&amp;nbsp;&lt;span class="c1"&gt;// It&amp;#39;s importat that this ignore of any url ending with ChartImg.axd is inserted before any Area route registrations.&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC4"&gt;&amp;nbsp;&amp;nbsp;&lt;span class="c1"&gt;// If you won&amp;#39;t use Charts in any Area you can put it in your RegisterRoutes() method. &lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC5"&gt;&amp;nbsp;&amp;nbsp;&lt;span class="n"&gt;RouteTable&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Routes&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Ignore&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;{*pathInfo}&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="n"&gt;pathInfo&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;@&amp;quot;^.*(ChartImg.axd)$&amp;quot;&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC6"&gt;&amp;nbsp;&amp;nbsp;&lt;span class="n"&gt;AreaRegistration&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;RegisterAllAreas&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC7"&gt;&amp;nbsp;&amp;nbsp;&lt;span class="n"&gt;RegisterRoutes&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;RouteTable&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Routes&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC8"&gt;&lt;br/&gt;&lt;/div&gt;&lt;div class="line" id="LC9"&gt;&amp;nbsp;&amp;nbsp;&lt;span class="c1"&gt;// The rest.. &lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC10"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC11"&gt;&lt;br/&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt;
          &lt;/div&gt;

          &lt;div class="gist-meta"&gt;
            &lt;a href="https://gist.github.com/raw/377126/8c7b6a550f7fead61f824da27df04217ea841d14/global.asax.cs" style="float:right;"&gt;view raw&lt;/a&gt;
            &lt;a href="https://gist.github.com/377126#file_global.asax.cs" style="float:right;margin-right:10px;color:#666"&gt;global.asax.cs&lt;/a&gt;
            &lt;a href="https://gist.github.com/377126"&gt;This Gist&lt;/a&gt; brought to you by &lt;a href="http://github.com"&gt;GitHub&lt;/a&gt;.
          &lt;/div&gt;
        &lt;/div&gt;

        &lt;div class="gist-file"&gt;
          &lt;div class="gist-data gist-syntax"&gt;
              &lt;div class="gist-highlight"&gt;&lt;pre&gt;&lt;div class="line" id="LC1"&gt;&lt;span class="nt"&gt;&amp;lt;%&lt;/span&gt; &lt;span class="n"&gt;Html&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;RenderPartial&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Chart&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Model&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="err"&gt;;&lt;/span&gt; &lt;span class="nt"&gt;%&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt;
          &lt;/div&gt;

          &lt;div class="gist-meta"&gt;
            &lt;a href="https://gist.github.com/raw/377126/ca6a69ff4cac16b184e6a57b2a0194dadbe5dcd0/MyChart.aspx" style="float:right;"&gt;view raw&lt;/a&gt;
            &lt;a href="https://gist.github.com/377126#file_my_chart.aspx" style="float:right;margin-right:10px;color:#666"&gt;MyChart.aspx&lt;/a&gt;
            &lt;a href="https://gist.github.com/377126"&gt;This Gist&lt;/a&gt; brought to you by &lt;a href="http://github.com"&gt;GitHub&lt;/a&gt;.
          &lt;/div&gt;
        &lt;/div&gt;

        &lt;div class="gist-file"&gt;
          &lt;div class="gist-data gist-syntax"&gt;
              &lt;div class="gist-highlight"&gt;&lt;pre&gt;&lt;div class="line" id="LC1"&gt;&lt;span class="cp"&gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot;?&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC2"&gt;&lt;span class="nt"&gt;&amp;lt;configuration&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC3"&gt;&lt;br/&gt;&lt;/div&gt;&lt;div class="line" id="LC4"&gt;&amp;nbsp;&lt;span class="c"&gt;&amp;lt;!-- Your stuff --&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC5"&gt;&lt;br/&gt;&lt;/div&gt;&lt;div class="line" id="LC6"&gt;&amp;nbsp;&lt;span class="nt"&gt;&amp;lt;appSettings&amp;gt;&lt;/span&gt;   &lt;/div&gt;&lt;div class="line" id="LC7"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="nt"&gt;&amp;lt;add&lt;/span&gt; &lt;span class="na"&gt;key=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;ChartImageHandler&amp;quot;&lt;/span&gt; &lt;span class="na"&gt;value=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;storage=file;timeout=20;&amp;quot;&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC8"&gt;&amp;nbsp;&lt;span class="nt"&gt;&amp;lt;/appSettings&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC9"&gt;&lt;br/&gt;&lt;/div&gt;&lt;div class="line" id="LC10"&gt;&amp;nbsp;&lt;span class="c"&gt;&amp;lt;!-- Your stuff --&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC11"&gt;&lt;br/&gt;&lt;/div&gt;&lt;div class="line" id="LC12"&gt;&amp;nbsp;&lt;span class="nt"&gt;&amp;lt;system.web&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC13"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="nt"&gt;&amp;lt;compilation&lt;/span&gt; &lt;span class="na"&gt;debug=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;true&amp;quot;&lt;/span&gt; &lt;span class="na"&gt;targetFramework=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;4.0&amp;quot;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC14"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="nt"&gt;&amp;lt;assemblies&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC15"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="c"&gt;&amp;lt;!-- Other assemblies --&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC16"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="nt"&gt;&amp;lt;add&lt;/span&gt; &lt;span class="na"&gt;assembly=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;System.Web.DataVisualization, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35&amp;quot;&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC17"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="nt"&gt;&amp;lt;/assemblies&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC18"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="nt"&gt;&amp;lt;/compilation&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC19"&gt;&lt;br/&gt;&lt;/div&gt;&lt;div class="line" id="LC20"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="c"&gt;&amp;lt;!-- Your stuff --&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC21"&gt;&lt;br/&gt;&lt;/div&gt;&lt;div class="line" id="LC22"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="nt"&gt;&amp;lt;httpHandlers&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC23"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="c"&gt;&amp;lt;!-- Other handlers --&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC24"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="nt"&gt;&amp;lt;add&lt;/span&gt; &lt;span class="na"&gt;path=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;ChartImg.axd&amp;quot;&lt;/span&gt; &lt;span class="na"&gt;verb=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;GET,HEAD&amp;quot;&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;System.Web.UI.DataVisualization.Charting.ChartHttpHandler, System.Web.DataVisualization, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35&amp;quot;&lt;/span&gt; &lt;span class="na"&gt;validate=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;false&amp;quot;&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC25"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="nt"&gt;&amp;lt;/httpHandlers&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC26"&gt;&amp;nbsp;&lt;span class="nt"&gt;&amp;lt;/system.web&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC27"&gt;&lt;br/&gt;&lt;/div&gt;&lt;div class="line" id="LC28"&gt;&amp;nbsp;&lt;span class="c"&gt;&amp;lt;!-- Your stuff --&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC29"&gt;&lt;br/&gt;&lt;/div&gt;&lt;div class="line" id="LC30"&gt;&amp;nbsp;&lt;span class="nt"&gt;&amp;lt;system.webServer&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC31"&gt;&amp;nbsp;&amp;nbsp;&lt;span class="nt"&gt;&amp;lt;handlers&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC32"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="c"&gt;&amp;lt;!-- Your handlers --&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC33"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="nt"&gt;&amp;lt;add&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;ChartImageHandler&amp;quot;&lt;/span&gt; &lt;span class="na"&gt;preCondition=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;integratedMode&amp;quot;&lt;/span&gt; &lt;span class="na"&gt;path=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;ChartImg.axd&amp;quot;&lt;/span&gt; &lt;span class="na"&gt;verb=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;GET,HEAD&amp;quot;&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;System.Web.UI.DataVisualization.Charting.ChartHttpHandler, System.Web.DataVisualization, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35&amp;quot;&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC34"&gt;&amp;nbsp;&amp;nbsp;&lt;span class="nt"&gt;&amp;lt;/handlers&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC35"&gt;&amp;nbsp;&lt;span class="nt"&gt;&amp;lt;/system.webServer&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC36"&gt;&lt;br/&gt;&lt;/div&gt;&lt;div class="line" id="LC37"&gt;&amp;nbsp;&lt;span class="c"&gt;&amp;lt;!-- Your stuff --&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC38"&gt;&lt;br/&gt;&lt;/div&gt;&lt;div class="line" id="LC39"&gt;&lt;span class="nt"&gt;&amp;lt;/configuration&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt;
          &lt;/div&gt;

          &lt;div class="gist-meta"&gt;
            &lt;a href="https://gist.github.com/raw/377126/02385c8fccdab8a9168ff5bfdbedcf9035ea420f/web.config.xml" style="float:right;"&gt;view raw&lt;/a&gt;
            &lt;a href="https://gist.github.com/377126#file_web.config.xml" style="float:right;margin-right:10px;color:#666"&gt;web.config.xml&lt;/a&gt;
            &lt;a href="https://gist.github.com/377126"&gt;This Gist&lt;/a&gt; brought to you by &lt;a href="http://github.com"&gt;GitHub&lt;/a&gt;.
          &lt;/div&gt;
        &lt;/div&gt;
&lt;/div&gt;

&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/devcarl?a=7j1PAOdaGag:Rj2rp95wF7U:JX1WZp-3p7k"&gt;&lt;img src="http://feeds.feedburner.com/~ff/devcarl?i=7j1PAOdaGag:Rj2rp95wF7U:JX1WZp-3p7k" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/devcarl/~4/7j1PAOdaGag" height="1" width="1"/&gt;</description>
      <pubDate>Sun, 25 Apr 2010 04:53:00 -0700</pubDate>
      <guid isPermaLink="false">http://carlhoerberg.com/aspnet-mvc-and-the-microsoft-chart-controls-in-net-40</guid>
    <feedburner:origLink>http://carlhoerberg.com/aspnet-mvc-and-the-microsoft-chart-controls-in-net-40</feedburner:origLink></item>
    <item>
      <title>How to use JQuery UI Autocomplete with Asp.Net MVC</title>
      <link>http://feedproxy.google.com/~r/devcarl/~3/EViW-njDF4g/how-to-use-jquery-ui-autocomplete-with-aspnet</link>
      <description>&lt;p&gt;&lt;a href="http://stephenwalther.com/blog/archive/2010/03/16/microsoft-jquery-and-templating.aspx"&gt;Microsoft has swifted&lt;/a&gt; away from &lt;a href="http://www.asp.net/ajax/"&gt;Ajax Library&lt;/a&gt; and they are promoting &lt;a href="http://jquery.com/"&gt;jQuery&lt;/a&gt; as the primary way of develop client side ajax applications. This is good news, Microsoft is even contributing resources to the jQuery core team. &lt;/p&gt;

&lt;p&gt;A couple of weeks ago i showed how you could use &lt;a href="http://devcarl.posterous.com/how-to-use-ajax-library-4-autocomplete-with-a"&gt;Ajax Library Autocomplete component with Asp.Net MVC&lt;/a&gt;. This time I will instead show you how to make &lt;a href="http://jqueryui.com/demos/autocomplete"&gt;the new Autocomplete component in jQuery UI 1.8&lt;/a&gt; play well with Asp.Net MVC, and it's a lot easier than with Ajax Library!  &lt;/p&gt;

&lt;p&gt;First, in your view, include jQuery 1.4 and jquery UI 1.8 (here i use &lt;a href="http://code.google.com/intl/sv/apis/ajaxlibs/documentation/index.html#jqueryUI"&gt;Google's javascript CDN&lt;/a&gt;), then add a text field to your body, then some javascript to hook it up:&lt;/p&gt;

&lt;p&gt;&lt;link rel="stylesheet" href="https://gist.github.com/stylesheets/gist/embed.css"/&gt;

&lt;div id="gist-951237" class="gist"&gt;

        &lt;div class="gist-file"&gt;
          &lt;div class="gist-data gist-syntax"&gt;
              &lt;div class="gist-highlight"&gt;&lt;pre&gt;&lt;div class="line" id="LC1"&gt;&lt;span class="nt"&gt;&amp;lt;html&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC2"&gt;&lt;span class="nt"&gt;&amp;lt;head&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC3"&gt;&amp;nbsp;&amp;nbsp;&lt;span class="nt"&gt;&amp;lt;link&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/themes/cupertino/jquery-ui.css&amp;quot;&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;text/css&amp;quot;&lt;/span&gt; &lt;span class="na"&gt;rel=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Stylesheet&amp;quot;&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC4"&gt;&amp;nbsp;&amp;nbsp;&lt;span class="nt"&gt;&amp;lt;script &lt;/span&gt;&lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js&amp;quot;&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;text/javascript&amp;quot;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/script&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC5"&gt;&amp;nbsp;&amp;nbsp;&lt;span class="nt"&gt;&amp;lt;script &lt;/span&gt;&lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/jquery-ui.min.js&amp;quot;&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;text/javascript&amp;quot;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/script&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC6"&gt;&lt;span class="nt"&gt;&amp;lt;/head&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC7"&gt;&lt;span class="nt"&gt;&amp;lt;body&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC8"&gt;&lt;span class="nt"&gt;&amp;lt;input&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;text&amp;quot;&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;completeMe&amp;quot;&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;completeMe&amp;quot;&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC9"&gt;&lt;span class="nt"&gt;&amp;lt;script &lt;/span&gt;&lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;text/javascript&amp;quot;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC10"&gt;&lt;span class="nx"&gt;$&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC11"&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 class="nx"&gt;$&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;#completeMe&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;autocomplete&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC12"&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;&lt;span class="nx"&gt;source&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;/Autocomplete/Users&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC13"&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;&lt;span class="nx"&gt;minLength&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC14"&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;&lt;span class="nx"&gt;select&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;ui&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC15"&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 class="c1"&gt;// Do something with  &amp;quot;ui.item.Id&amp;quot; or &amp;quot;ui.item.Name&amp;quot; or any of the other properties you selected to return from the action &lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC16"&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;&lt;span class="p"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC17"&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 class="p"&gt;});&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC18"&gt;&lt;span class="p"&gt;});&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC19"&gt;&lt;span class="nt"&gt;&amp;lt;/script&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC20"&gt;&lt;span class="nt"&gt;&amp;lt;/body&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC21"&gt;&lt;span class="nt"&gt;&amp;lt;/html&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt;
          &lt;/div&gt;

          &lt;div class="gist-meta"&gt;
            &lt;a href="https://gist.github.com/raw/951237/5d1ddf1cfe7b30372ab4bdbf600966ff3af7df0f/autocomplete.html" style="float:right;"&gt;view raw&lt;/a&gt;
            &lt;a href="https://gist.github.com/951237#file_autocomplete.html" style="float:right;margin-right:10px;color:#666"&gt;autocomplete.html&lt;/a&gt;
            &lt;a href="https://gist.github.com/951237"&gt;This Gist&lt;/a&gt; brought to you by &lt;a href="http://github.com"&gt;GitHub&lt;/a&gt;.
          &lt;/div&gt;
        &lt;/div&gt;

        &lt;div class="gist-file"&gt;
          &lt;div class="gist-data gist-syntax"&gt;
              &lt;div class="gist-highlight"&gt;&lt;pre&gt;&lt;div class="line" id="LC1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;AutocompleteController&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;Controller&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="p"&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="k"&gt;private&lt;/span&gt; &lt;span class="k"&gt;readonly&lt;/span&gt; &lt;span class="n"&gt;IRepository&lt;/span&gt; &lt;span class="n"&gt;db&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC4"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="nf"&gt;AutocompleteController&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;IRepository&lt;/span&gt; &lt;span class="n"&gt;db&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC5"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="p"&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC6"&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 class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;db&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;db&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC7"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="p"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC8"&gt;&lt;br/&gt;&lt;/div&gt;&lt;div class="line" id="LC9"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="n"&gt;JsonResult&lt;/span&gt; &lt;span class="nf"&gt;Users&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;term&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC10"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="p"&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC11"&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 class="n"&gt;var&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;db&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Query&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;User&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;()&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC12"&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;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Where&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;r&lt;/span&gt; &lt;span class="p"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Name&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;StartsWith&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;term&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC13"&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;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Select&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;r&lt;/span&gt; &lt;span class="p"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;value&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Name&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC14"&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;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Take&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;10&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC15"&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;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ToArray&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC16"&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 class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;Json&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;JsonRequestBehavior&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;AllowGet&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC17"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="p"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC18"&gt;&lt;br/&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt;
          &lt;/div&gt;

          &lt;div class="gist-meta"&gt;
            &lt;a href="https://gist.github.com/raw/951237/8a60f9512c6e699de9b991d9f18f5f16691206a9/AutocompleteController.cs" style="float:right;"&gt;view raw&lt;/a&gt;
            &lt;a href="https://gist.github.com/951237#file_autocomplete_controller.cs" style="float:right;margin-right:10px;color:#666"&gt;AutocompleteController.cs&lt;/a&gt;
            &lt;a href="https://gist.github.com/951237"&gt;This Gist&lt;/a&gt; brought to you by &lt;a href="http://github.com"&gt;GitHub&lt;/a&gt;.
          &lt;/div&gt;
        &lt;/div&gt;
&lt;/div&gt;

&lt;/p&gt;

&lt;p&gt;I've included the select event, which will fire when the users has selected an item, in which you can load more stuff etc. Be sure to check out the &lt;a href="http://docs.jquery.com/UI/Autocomplete"&gt;API for autocomplete &lt;/a&gt; for more events and properties. &lt;/p&gt;

&lt;p&gt;If you look at the Autocomplete controller you see that I query my User table where the Users name starts with the incoming term. We select only the id and the name from the user (you can select more stuff if you want to make it available in your jQuery events). I only take 10 items, make an array of them which we return as Json. &lt;/p&gt;

&lt;p&gt;Important to note is that we have to add &amp;quot;JsonRequestBehavior.AllowGet&amp;quot; argument to the Json() function because jQuery UI Autocomplete makes a Get request and Asp.Net MVC by default doesn't allow this &lt;a href="http://haacked.com/archive/2008/11/20/anatomy-of-a-subtle-json-vulnerability.aspx"&gt;because of the security concerns&lt;/a&gt;.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/devcarl?a=EViW-njDF4g:QmmzypK-uvo:JX1WZp-3p7k"&gt;&lt;img src="http://feeds.feedburner.com/~ff/devcarl?i=EViW-njDF4g:QmmzypK-uvo:JX1WZp-3p7k" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/devcarl/~4/EViW-njDF4g" height="1" width="1"/&gt;</description>
      <pubDate>Tue, 20 Apr 2010 11:51:00 -0700</pubDate>
      <guid isPermaLink="false">http://carlhoerberg.com/how-to-use-jquery-ui-autocomplete-with-aspnet</guid>
    <feedburner:origLink>http://carlhoerberg.com/how-to-use-jquery-ui-autocomplete-with-aspnet</feedburner:origLink></item>
  </channel>
</rss>

