<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://weblogs.asp.net/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Johan Danforth's Blog : LINQ</title><link>http://weblogs.asp.net/jdanforth/archive/tags/LINQ/default.aspx</link><description>Tags: LINQ</description><dc:language>en</dc:language><generator>CommunityServer 2007 SP1 (Build: 20510.895)</generator><item><title>Please Feedback! Unity, nHibernate, Fluent, Linq... Trying New Architecture Combinations</title><link>http://weblogs.asp.net/jdanforth/archive/2008/12/17/please-feedback-unity-nhibernate-fluent-linq-trying-new-architecture-combinations.aspx</link><pubDate>Wed, 17 Dec 2008 13:04:38 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:6792594</guid><dc:creator>jdanforth</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/jdanforth/rsscomments.aspx?PostID=6792594</wfw:commentRss><comments>http://weblogs.asp.net/jdanforth/archive/2008/12/17/please-feedback-unity-nhibernate-fluent-linq-trying-new-architecture-combinations.aspx#comments</comments><description>&lt;p&gt;We're thinking about a new architecture for a set of pretty large WCF (and perhaps also REST) services that's going to be developed during the next year and perhaps you dear reader would like to comment!&lt;/p&gt;  &lt;p&gt;The services themselves are pretty straight forward, we're going to serve data from a huge SQL Server database which unfortunately is old and lacks relationship/fk/pk between most tables. Nothing we can do about that I'm afraid but we thought that nHibernate could be a good way to map data to domain objects. Some of the services will need to handle more complex business rules, but no heavy computing or long running stuff (not atm anyway).&lt;/p&gt;  &lt;p&gt;What more can I say... everything is going to be running on .NET 3.5, and we have a pretty good view of the business domain, we're currently modelling the information/domain together with the customer and we will probably be developing the whole thing in a DDD-ish way, using unit and integration tests, IoC...&lt;/p&gt;  &lt;p&gt;So, currently we're thinking of WCF/REST for the service layer, Unity as container and building something around nHibernate for the Repository (looking at the IRepository implementation in Fluent). We're new to nHibernate but have been looking at nHibernate.Linq which looks really nice, and I think we'll use the Fluent API and map the classes in code instead of using XML configuration (which I'm allergic against). Just have to figure out a good way to make it all fit together, especially to get a decent UnitOfWork to work with the nHibernate session and the repository. I'll see what I come up with and post it here.&lt;/p&gt;  &lt;p&gt;Ideas? Please comment or send me an email of you like. &lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6792594" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/jdanforth/archive/tags/WCF/default.aspx">WCF</category><category domain="http://weblogs.asp.net/jdanforth/archive/tags/REST/default.aspx">REST</category><category domain="http://weblogs.asp.net/jdanforth/archive/tags/LINQ/default.aspx">LINQ</category><category domain="http://weblogs.asp.net/jdanforth/archive/tags/nHibernate/default.aspx">nHibernate</category></item><item><title>LINQ to XML in VB.NET and Using the Right Language for the Job</title><link>http://weblogs.asp.net/jdanforth/archive/2008/10/15/linq-to-xml-in-vb-net-and-using-the-right-language-for-the-job.aspx</link><pubDate>Wed, 15 Oct 2008 11:17:50 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:6682010</guid><dc:creator>jdanforth</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/jdanforth/rsscomments.aspx?PostID=6682010</wfw:commentRss><comments>http://weblogs.asp.net/jdanforth/archive/2008/10/15/linq-to-xml-in-vb-net-and-using-the-right-language-for-the-job.aspx#comments</comments><description>&lt;p&gt;I'm almost always using C# in my .NET projects, unless I'm doing Office automation where the VB-way of dealing with optional parameters helps out making the code a bit cleaner. &lt;/p&gt;  &lt;p&gt;The last week we've been upgrading ASMX-clients to become WCF-clients for a number of old .NET 1.1 and 2.0 projects, and we ended up with a bunch of app.config files with loads and loads of WCF client endpoint sections, each of them pointing at their own binding configuration. To manually clean this up would take hours and hours of tedious work which would probably result in more than a few errors.&lt;/p&gt;  &lt;p&gt;So I thought maybe I could do search/replace with a regexp-capable editor... or try out XML Literals in VB.NET. I wanted to remove old behaviors, extensions and bindings, then add my own behaviors and extensions and finally change some attributes on each client endpoint. Doing this with XML Literals and XDocument/XElement in VB.NET was quite straight forward and didn't result in too many lines of code:&lt;/p&gt;  &lt;pre class="code"&gt;&lt;span style="color: rgb(0,0,255)"&gt;Imports&lt;/span&gt; System
&lt;span style="color: rgb(0,0,255)"&gt;Imports&lt;/span&gt; System.Xml.Linq
&lt;span style="color: rgb(0,0,255)"&gt;Imports&lt;/span&gt; System.IO
&lt;span style="color: rgb(0,0,255)"&gt;Imports&lt;/span&gt; System.Linq&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;pre class="code"&gt;    &lt;span style="color: rgb(0,0,255)"&gt;Sub&lt;/span&gt; FixupConfig(&lt;span style="color: rgb(0,0,255)"&gt;ByVal&lt;/span&gt; infile &lt;span style="color: rgb(0,0,255)"&gt;As&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;String&lt;/span&gt;, &lt;span style="color: rgb(0,0,255)"&gt;ByVal&lt;/span&gt; outfile &lt;span style="color: rgb(0,0,255)"&gt;As&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;String&lt;/span&gt;)
        &lt;span style="color: rgb(0,0,255)"&gt;Dim&lt;/span&gt; defaultBindingConfigurationXml = &lt;span style="color: rgb(100,100,185)"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(132,70,70)"&gt;binding&lt;/span&gt; &lt;span style="color: rgb(185,100,100)"&gt;name&lt;/span&gt;&lt;span style="color: rgb(100,100,185)"&gt;=&lt;/span&gt;&lt;span style="color: rgb(85,85,85)"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: rgb(100,100,185)"&gt;defaultBindingConfiguration&lt;/span&gt;&lt;span style="color: rgb(85,85,85)"&gt;&amp;quot;
&lt;/span&gt;                                              &lt;span style="color: rgb(185,100,100)"&gt;maxBufferSize&lt;/span&gt;&lt;span style="color: rgb(100,100,185)"&gt;=&lt;/span&gt;&lt;span style="color: rgb(85,85,85)"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: rgb(100,100,185)"&gt;1065536&lt;/span&gt;&lt;span style="color: rgb(85,85,85)"&gt;&amp;quot;
&lt;/span&gt;                                              &lt;span style="color: rgb(185,100,100)"&gt;maxBufferPoolSize&lt;/span&gt;&lt;span style="color: rgb(100,100,185)"&gt;=&lt;/span&gt;&lt;span style="color: rgb(85,85,85)"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: rgb(100,100,185)"&gt;524288&lt;/span&gt;&lt;span style="color: rgb(85,85,85)"&gt;&amp;quot;
&lt;/span&gt;                                              &lt;span style="color: rgb(185,100,100)"&gt;maxReceivedMessageSize&lt;/span&gt;&lt;span style="color: rgb(100,100,185)"&gt;=&lt;/span&gt;&lt;span style="color: rgb(85,85,85)"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: rgb(100,100,185)"&gt;1065536&lt;/span&gt;&lt;span style="color: rgb(85,85,85)"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: rgb(100,100,185)"&gt;/&amp;gt;

&lt;/span&gt;        &lt;span style="color: rgb(0,0,255)"&gt;Dim&lt;/span&gt; behaviorsXml = &lt;span style="color: rgb(100,100,185)"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(132,70,70)"&gt;behaviors&lt;/span&gt;&lt;span style="color: rgb(100,100,185)"&gt;&amp;gt;
&lt;/span&gt;                               &lt;span style="color: rgb(100,100,185)"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(132,70,70)"&gt;endpointBehaviors&lt;/span&gt;&lt;span style="color: rgb(100,100,185)"&gt;&amp;gt;
&lt;/span&gt;                                   &lt;span style="color: rgb(100,100,185)"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(132,70,70)"&gt;behavior&lt;/span&gt; &lt;span style="color: rgb(185,100,100)"&gt;name&lt;/span&gt;&lt;span style="color: rgb(100,100,185)"&gt;=&lt;/span&gt;&lt;span style="color: rgb(85,85,85)"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: rgb(100,100,185)"&gt;FacadeSoapEndpointBehavior&lt;/span&gt;&lt;span style="color: rgb(85,85,85)"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: rgb(100,100,185)"&gt;&amp;gt;
&lt;/span&gt;                                       &lt;span style="color: rgb(100,100,185)"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(132,70,70)"&gt;SetMaxFaultSizeBehavior&lt;/span&gt; &lt;span style="color: rgb(185,100,100)"&gt;size&lt;/span&gt;&lt;span style="color: rgb(100,100,185)"&gt;=&lt;/span&gt;&lt;span style="color: rgb(85,85,85)"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: rgb(100,100,185)"&gt;100000&lt;/span&gt;&lt;span style="color: rgb(85,85,85)"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: rgb(100,100,185)"&gt;/&amp;gt;
&lt;/span&gt;                                       &lt;span style="color: rgb(100,100,185)"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(132,70,70)"&gt;ClientExceptionHandlerBehavior&lt;/span&gt;&lt;span style="color: rgb(100,100,185)"&gt;/&amp;gt;
&lt;/span&gt;                                   &lt;span style="color: rgb(100,100,185)"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(132,70,70)"&gt;behavior&lt;/span&gt;&lt;span style="color: rgb(100,100,185)"&gt;&amp;gt;
&lt;/span&gt;                               &lt;span style="color: rgb(100,100,185)"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(132,70,70)"&gt;endpointBehaviors&lt;/span&gt;&lt;span style="color: rgb(100,100,185)"&gt;&amp;gt;
&lt;/span&gt;                           &lt;span style="color: rgb(100,100,185)"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(132,70,70)"&gt;behaviors&lt;/span&gt;&lt;span style="color: rgb(100,100,185)"&gt;&amp;gt;

&lt;/span&gt;        &lt;span style="color: rgb(0,0,255)"&gt;Dim&lt;/span&gt; extensionsXml = &lt;span style="color: rgb(100,100,185)"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(132,70,70)"&gt;extensions&lt;/span&gt;&lt;span style="color: rgb(100,100,185)"&gt;&amp;gt;
&lt;/span&gt;                                &lt;span style="color: rgb(100,100,185)"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(132,70,70)"&gt;behaviorExtensions&lt;/span&gt;&lt;span style="color: rgb(100,100,185)"&gt;&amp;gt;
&lt;/span&gt;                                    &lt;span style="color: rgb(100,100,185)"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(132,70,70)"&gt;add&lt;/span&gt; &lt;span style="color: rgb(185,100,100)"&gt;name&lt;/span&gt;&lt;span style="color: rgb(100,100,185)"&gt;=&lt;/span&gt;&lt;span style="color: rgb(85,85,85)"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: rgb(100,100,185)"&gt;SetMaxFaultSizeBehavior&lt;/span&gt;&lt;span style="color: rgb(85,85,85)"&gt;&amp;quot;&lt;/span&gt; &lt;br /&gt;&lt;span style="color: rgb(185,100,100)"&gt;type&lt;/span&gt;&lt;span style="color: rgb(100,100,185)"&gt;=&lt;/span&gt;&lt;span style="color: rgb(85,85,85)"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: rgb(100,100,185)"&gt;SomeType.SetMaxFaultSizeBehavior, SomeAssembly, Version=1.0.0.0, &lt;br /&gt;Culture=neutral, PublicKeyToken=null&lt;/span&gt;&lt;span style="color: rgb(85,85,85)"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: rgb(100,100,185)"&gt;/&amp;gt;
&lt;/span&gt;                                    &lt;span style="color: rgb(100,100,185)"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(132,70,70)"&gt;add&lt;/span&gt; &lt;span style="color: rgb(185,100,100)"&gt;name&lt;/span&gt;&lt;span style="color: rgb(100,100,185)"&gt;=&lt;/span&gt;&lt;span style="color: rgb(85,85,85)"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: rgb(100,100,185)"&gt;ClientExceptionHandlerBehavior&lt;/span&gt;&lt;span style="color: rgb(85,85,85)"&gt;&amp;quot;&lt;/span&gt; &lt;br /&gt;&lt;span style="color: rgb(185,100,100)"&gt;type&lt;/span&gt;&lt;span style="color: rgb(100,100,185)"&gt;=&lt;/span&gt;&lt;span style="color: rgb(85,85,85)"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: rgb(100,100,185)"&gt;&lt;span style="color: rgb(100,100,185)"&gt;SomeType.&lt;/span&gt;ClientExceptionHandler, SomeAssembly, Version=1.0.0.0, &lt;br /&gt;Culture=neutral, PublicKeyToken=null&lt;/span&gt;&lt;span style="color: rgb(85,85,85)"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: rgb(100,100,185)"&gt;/&amp;gt;
&lt;/span&gt;                                &lt;span style="color: rgb(100,100,185)"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(132,70,70)"&gt;behaviorExtensions&lt;/span&gt;&lt;span style="color: rgb(100,100,185)"&gt;&amp;gt;
&lt;/span&gt;                            &lt;span style="color: rgb(100,100,185)"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(132,70,70)"&gt;extensions&lt;/span&gt;&lt;span style="color: rgb(100,100,185)"&gt;&amp;gt;


&lt;/span&gt;        &lt;span style="color: rgb(0,0,255)"&gt;Dim&lt;/span&gt; xdoc = XDocument.Load(infile)

        xdoc...&lt;span style="color: rgb(100,100,185)"&gt;&amp;lt;&lt;/span&gt;system.serviceModel&lt;span style="color: rgb(100,100,185)"&gt;&amp;gt;&lt;/span&gt;.&lt;span style="color: rgb(100,100,185)"&gt;&amp;lt;&lt;/span&gt;behaviors&lt;span style="color: rgb(100,100,185)"&gt;&amp;gt;&lt;/span&gt;.Remove()
        xdoc...&lt;span style="color: rgb(100,100,185)"&gt;&amp;lt;&lt;/span&gt;system.serviceModel&lt;span style="color: rgb(100,100,185)"&gt;&amp;gt;&lt;/span&gt;.&lt;span style="color: rgb(100,100,185)"&gt;&amp;lt;&lt;/span&gt;extensions&lt;span style="color: rgb(100,100,185)"&gt;&amp;gt;&lt;/span&gt;.Remove()

        xdoc...&lt;span style="color: rgb(100,100,185)"&gt;&amp;lt;&lt;/span&gt;system.serviceModel&lt;span style="color: rgb(100,100,185)"&gt;&amp;gt;&lt;/span&gt;.Single().AddFirst(extensionsXml)
        xdoc...&lt;span style="color: rgb(100,100,185)"&gt;&amp;lt;&lt;/span&gt;system.serviceModel&lt;span style="color: rgb(100,100,185)"&gt;&amp;gt;&lt;/span&gt;.Single().AddFirst(behaviorsXml)

        xdoc...&lt;span style="color: rgb(100,100,185)"&gt;&amp;lt;&lt;/span&gt;system.serviceModel&lt;span style="color: rgb(100,100,185)"&gt;&amp;gt;&lt;/span&gt;.&lt;span style="color: rgb(100,100,185)"&gt;&amp;lt;&lt;/span&gt;bindings&lt;span style="color: rgb(100,100,185)"&gt;&amp;gt;&lt;/span&gt;.&lt;span style="color: rgb(100,100,185)"&gt;&amp;lt;&lt;/span&gt;basicHttpBinding&lt;span style="color: rgb(100,100,185)"&gt;&amp;gt;&lt;/span&gt;.Descendants.Remove()
        xdoc...&lt;span style="color: rgb(100,100,185)"&gt;&amp;lt;&lt;/span&gt;system.serviceModel&lt;span style="color: rgb(100,100,185)"&gt;&amp;gt;&lt;/span&gt;.&lt;span style="color: rgb(100,100,185)"&gt;&amp;lt;&lt;/span&gt;bindings&lt;span style="color: rgb(100,100,185)"&gt;&amp;gt;&lt;/span&gt;.&lt;span style="color: rgb(100,100,185)"&gt;&amp;lt;&lt;/span&gt;basicHttpBinding&lt;span style="color: rgb(100,100,185)"&gt;&amp;gt;&lt;/span&gt;.Single().Add(defaultBindingConfigurationXml)

        &lt;span style="color: rgb(0,0,255)"&gt;Dim&lt;/span&gt; elems = xdoc...&lt;span style="color: rgb(100,100,185)"&gt;&amp;lt;&lt;/span&gt;client&lt;span style="color: rgb(100,100,185)"&gt;&amp;gt;&lt;/span&gt;.&lt;span style="color: rgb(100,100,185)"&gt;&amp;lt;&lt;/span&gt;endpoint&lt;span style="color: rgb(100,100,185)"&gt;&amp;gt;
&lt;/span&gt;        &lt;span style="color: rgb(0,0,255)"&gt;For&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;Each&lt;/span&gt; element &lt;span style="color: rgb(0,0,255)"&gt;In&lt;/span&gt; elems
            element.&lt;span style="color: rgb(100,100,185)"&gt;@&lt;/span&gt;bindingConfiguration = &lt;span style="color: rgb(163,21,21)"&gt;&amp;quot;defaultBindingConfiguration&amp;quot;
&lt;/span&gt;            element.&lt;span style="color: rgb(100,100,185)"&gt;@&lt;/span&gt;behaviorConfiguration = &lt;span style="color: rgb(163,21,21)"&gt;&amp;quot;FacadeSoapEndpointBehavior&amp;quot;
&lt;/span&gt;        &lt;span style="color: rgb(0,0,255)"&gt;Next

&lt;/span&gt;        xdoc.Save(outfile)

    &lt;span style="color: rgb(0,0,255)"&gt;End&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;Sub
&lt;/span&gt;&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;p&gt;I've heard people recommend to use VB.NET when dealing with XML and I agree - use the right language for the job. When doing this - remember to import System.Linq or you'll miss some vital extensions like the .Add() and .Single() methods ;)&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6682010" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/jdanforth/archive/tags/.NET+3.5/default.aspx">.NET 3.5</category><category domain="http://weblogs.asp.net/jdanforth/archive/tags/XML/default.aspx">XML</category><category domain="http://weblogs.asp.net/jdanforth/archive/tags/LINQ/default.aspx">LINQ</category></item></channel></rss>