<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:copyright="http://blogs.law.harvard.edu/tech/rss" xmlns:image="http://purl.org/rss/1.0/modules/image/">
    <channel>
        <title>.NET Development</title>
        <link>http://blogs.ugidotnet.org/Alby/category/.NET Development.aspx</link>
        <description>.NET Development</description>
        <language>it-IT</language>
        <copyright>Alberto Dallagiacoma</copyright>
        <generator>Subtext Version 2.6.0.0</generator>
        <item>
            <title>Upgrade di Service Fabric - Storie di vita vissuta</title>
            <link>http://blogs.ugidotnet.org/Alby/archive/2017/09/26/Upgrade-di-Service-Fabric-Storie-di-vita-vissuta.aspx</link>
            <description>&lt;p&gt;&lt;img style="margin: 0px 10px 0px 0px; border-image: none; float: left; display: inline;" alt="Service Fabric Team's avatar" src="https://i1.social.s-msft.com/profile/u/avatar.jpg?displayname=service%20fabric%20team&amp;amp;size=extralarge&amp;amp;version=b46607eb-a503-49c1-86e1-fa13206720cd" width="140" align="left" height="112" /&gt;Vista la &lt;a href="https://blogs.msdn.microsoft.com/azureservicefabric/2017/09/25/service-fabric-6-0-release/" target="_blank"&gt;disponibilità della versione 6.0 del runtime di Service Fabric&lt;/a&gt; ho aggiornato la mia macchina di sviluppo, ma la cosa non è andata propriamente “liscia”, nonostante abbia usato il &lt;a href="https://www.microsoft.com/web/downloads/platform.aspx" target="_blank"&gt;Web Platform Installer&lt;/a&gt; come ho sempre fatto per le versioni precedenti.     &lt;br /&gt; La procedura di setup usa uno script PowerShell chiamato CleanFabric.ps1, che si trova in C:\Program Files\Microsoft Service Fabric\bin\Fabric\Fabric.Code. Lo script elimina l’installazione precedente prima di procedere al setup della nuova versione...&lt;/p&gt;  &lt;p&gt;  ...Se ci riesce!  &lt;/p&gt;  &lt;p&gt;Nel mio caso, l’upgrade si è bloccato con questo errore:  &lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;“Unable to delete C:\Program Files\Service Fabric. Delete manually”&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Se bastasse questo, sarebbe troppo facile: purtroppo, alcuni file risultavano in uso da qualche processo sconosciuto.  &lt;br /&gt; Il motivo è che il setup di Service Fabric installa due driver ad un livello di Sistema Operativo abbastanza "basso":&lt;/p&gt;  &lt;p&gt;KtlLogger.sys     KtlLogger: KTL Physical Logger Device Driver (c:\program files\microsoft service fabric\bin\fabric\fabric.code\ktllogger.sys)    &lt;br /&gt;LeasLayr.sys      LeasLayr: Lease Layer Device Driver (c:\program files\microsoft service fabric\bin\fabric\fabric.code\leaslayr.sys)&lt;/p&gt;  &lt;p&gt;Questi driver erano ovviamente in uso da Windows al momento del setup, motivo per cui né il setup stesso, né il sottoscritto sono riusciti ad eliminare la cartella.    &lt;br /&gt;L’unica soluzione che ho trovato è stato usare il tool "autoruns.exe" di San Mark Russinovich (&lt;a href="https://docs.microsoft.com/en-us/sysinternals/downloads/autoruns):"&gt;https://docs.microsoft.com/en-us/sysinternals/downloads/autoruns):&lt;/a&gt; tramite il tool ho disabilitato i drivers, in modo che non vengano attivati in automatico da Windows allo startup.     &lt;br /&gt; Ho poi riavviato il PC e eliminato manualmente la cartella senza problemi. A questo punto il setup della nuova versione si è concluso correttamente, riconfigurando correttamente i driver.&lt;/p&gt;  &lt;p&gt;Lo posto qui, nel caso possa servire ad evitare qualche mal di pancia... ;-)&lt;/p&gt;  &lt;div id="scid:77ECF5F8-D252-44F5-B4EB-D463C5396A79:265b7a34-78a2-41ca-82fc-96b4ee2dfef7" class="wlWriterEditableSmartContent" style="margin: 0px; padding: 0px; float: none; display: inline;"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/Service+Fabric" rel="tag"&gt;Service Fabric&lt;/a&gt;&lt;/div&gt;&lt;img src="http://blogs.ugidotnet.org/Alby/aggbug/102496.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Alberto Dallagiacoma</dc:creator>
            <guid>http://blogs.ugidotnet.org/Alby/archive/2017/09/26/Upgrade-di-Service-Fabric-Storie-di-vita-vissuta.aspx</guid>
            <pubDate>Tue, 26 Sep 2017 15:24:00 GMT</pubDate>
            <comments>http://blogs.ugidotnet.org/Alby/archive/2017/09/26/Upgrade-di-Service-Fabric-Storie-di-vita-vissuta.aspx#feedback</comments>
            <slash:comments>2</slash:comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/Alby/comments/commentRss/102496.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/Alby/services/trackbacks/102496.aspx</trackback:ping>
        </item>
        <item>
            <title>Visual NUnit</title>
            <link>http://blogs.ugidotnet.org/Alby/archive/2012/04/06/visual-nunit.aspx</link>
            <description>&lt;p&gt;E’ più che altro una questione di abitudine, ma mi sono sempre trovato così bene con &lt;a href="http://www.nunit.org/" target="_blank"&gt;NUnit&lt;/a&gt;, che non mi è mai capitato di usare sul serio MSTest.    &lt;br /&gt;Una cosa davvero molto bella che ha MSTest è, ovviamente, la totale integrazione con l’IDE di Visual Studio, cosa che &lt;a href="http://www.nunit.org" target="_blank"&gt;NUnit&lt;/a&gt; può avere solo con tool di terze parti, spesso a pagamento (&lt;a href="http://www.jetbrains.com/resharper/" target="_blank"&gt;ReSharper&lt;/a&gt; in primis).&lt;/p&gt;  &lt;p&gt;Ho trovato però &lt;a href="http://visualstudiogallery.msdn.microsoft.com/c8164c71-0836-4471-80ce-633383031099" target="_blank"&gt;Visual NUnit 2010&lt;/a&gt;, un add-in molto carino per Visual Studio 2010 che aggiunge un test runner per NUnit all’IDE di Visual Studio 2010. Non è completo come quello di &lt;a href="http://www.jetbrains.com/resharper/" target="_blank"&gt;ReSharper&lt;/a&gt;, ma per gli “NUnit addicted” è decisamente da provare.&lt;/p&gt;&lt;img src="http://blogs.ugidotnet.org/Alby/aggbug/100926.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Alberto Dallagiacoma</dc:creator>
            <guid>http://blogs.ugidotnet.org/Alby/archive/2012/04/06/visual-nunit.aspx</guid>
            <pubDate>Fri, 06 Apr 2012 15:30:00 GMT</pubDate>
            <comments>http://blogs.ugidotnet.org/Alby/archive/2012/04/06/visual-nunit.aspx#feedback</comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/Alby/comments/commentRss/100926.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/Alby/services/trackbacks/100926.aspx</trackback:ping>
        </item>
        <item>
            <title>AppFabric 1.1 Cumulative Update</title>
            <link>http://blogs.ugidotnet.org/Alby/archive/2012/04/05/appfabric-1.1-cumulative-update.aspx</link>
            <description>&lt;p&gt;E’ stata rilasciata una Cumulative Update per &lt;a href="http://msdn.microsoft.com/en-us/library/hh351318.aspx" target="_blank"&gt;Windows Server AppFabric 1.1&lt;/a&gt; che risolve alcune “magagne” qua e là.     &lt;br /&gt;Come buona abitudine, consiglio sempre di leggere prima le &lt;a href="http://support.microsoft.com/kb/2671763/en-us" target="_blank"&gt;informazioni sull’update&lt;/a&gt;, e poi eventualmente procedere al &lt;a href="http://www.microsoft.com/download/en/details.aspx?id=29241&amp;amp;WT.mc_id=" target="_blank"&gt;download&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Mi raccomando! &lt;img style="border-bottom-style: none; border-left-style: none; border-top-style: none; border-right-style: none" class="wlEmoticon wlEmoticon-smile" alt="Smile" src="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/Alby/Windows-Live-Writer/AppFabric-1.1-Cumulative-Update_1358B/wlEmoticon-smile_2.png" /&gt;&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:539c552c-f9a9-4abc-80e3-41cabf200328" class="wlWriterEditableSmartContent"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/AppFabric" rel="tag"&gt;AppFabric&lt;/a&gt;&lt;/div&gt;&lt;img src="http://blogs.ugidotnet.org/Alby/aggbug/100925.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Alberto Dallagiacoma</dc:creator>
            <guid>http://blogs.ugidotnet.org/Alby/archive/2012/04/05/appfabric-1.1-cumulative-update.aspx</guid>
            <pubDate>Thu, 05 Apr 2012 23:05:10 GMT</pubDate>
            <comments>http://blogs.ugidotnet.org/Alby/archive/2012/04/05/appfabric-1.1-cumulative-update.aspx#feedback</comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/Alby/comments/commentRss/100925.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/Alby/services/trackbacks/100925.aspx</trackback:ping>
        </item>
        <item>
            <title>NBuilder</title>
            <link>http://blogs.ugidotnet.org/Alby/archive/2010/11/02/nbuilder.aspx</link>
            <description>&lt;p&gt;Me lo segno qui, perché l’altro qualche giorno fa ne avevo bisogno, ma non mi ricordavo né il nome, né il sito… &lt;img style="border-bottom-style: none; border-right-style: none; border-top-style: none; border-left-style: none" class="wlEmoticon wlEmoticon-steamingmad" alt="Steaming mad" src="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/Alby/Windows-Live-Writer/NBuilder_A1DD/wlEmoticon-steamingmad_2.png" /&gt; (grazie &lt;a href="http://blog.fewbit.com/" target="_blank"&gt;Luca&lt;/a&gt;, per il reminder &lt;img style="border-bottom-style: none; border-right-style: none; border-top-style: none; border-left-style: none" class="wlEmoticon wlEmoticon-openmouthedsmile" alt="Open-mouthed smile" src="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/Alby/Windows-Live-Writer/NBuilder_A1DD/wlEmoticon-openmouthedsmile_2.png" /&gt;).&lt;/p&gt;  &lt;p&gt;Tutte le volte che creiamo i nostri unit test, abbiamo anche bisogno di creare le istanze delle classi che saranno poi oggetto dei test.    &lt;br /&gt;&lt;a href="http://www.nbuilder.org/" target="_blank"&gt;NBuilder&lt;/a&gt; è una libreria che facilita la creazione di test objects, evitandoci di scrivere tutto quel noioso codice in fase di &lt;a href="http://www.nunit.org/index.php?p=setup&amp;amp;r=2.5.8" target="_blank"&gt;SetUp&lt;/a&gt;/&lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.visualstudio.testtools.unittesting.testinitializeattribute.aspx" target="_blank"&gt;TestInitialize&lt;/a&gt; di ogni test fixture.&lt;/p&gt;  &lt;p&gt;Io l’ho trovata davvero utile! Il download, &lt;a href="http://www.nbuilder.org/Download" target="_blank"&gt;qui&lt;/a&gt;.&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:74bf6f84-2ac0-4a18-a6ab-a705ca51aade" class="wlWriterEditableSmartContent"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/.NET" rel="tag"&gt;.NET&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Testing" rel="tag"&gt;Testing&lt;/a&gt;&lt;/div&gt;&lt;img src="http://blogs.ugidotnet.org/Alby/aggbug/99427.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Alberto Dallagiacoma</dc:creator>
            <guid>http://blogs.ugidotnet.org/Alby/archive/2010/11/02/nbuilder.aspx</guid>
            <pubDate>Tue, 02 Nov 2010 12:41:00 GMT</pubDate>
            <comments>http://blogs.ugidotnet.org/Alby/archive/2010/11/02/nbuilder.aspx#feedback</comments>
            <slash:comments>1</slash:comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/Alby/comments/commentRss/99427.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/Alby/services/trackbacks/99427.aspx</trackback:ping>
        </item>
        <item>
            <title>Nuova versione di Castle Windsor (e NHibernate?)</title>
            <link>http://blogs.ugidotnet.org/Alby/archive/2010/08/24/nuova-versione-di-castle-windsor-e-nhibernate.aspx</link>
            <description>&lt;p&gt;Giusto ieri è stata rilasciata la &lt;a href="http://kozmic.pl/archive/2010/08/22/castle-windsor-incl.-core-with-dynamicproxy-and-dictionary-adapter-v2.5.aspx" target="_blank"&gt;nuova versione 2.5&lt;/a&gt; di &lt;a href="http://www.castleproject.org/container/index.html" target="_blank"&gt;Castle Windsor&lt;/a&gt;; tra le tante novità, il supporto a .NET 4.0 e &lt;a href="http://www.silverlight.net/" target="_blank"&gt;Silverlight&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Bene; supponiamo di voler aggiornare un progetto esistente basato su &lt;a href="http://www.nhforge.org" target="_blank"&gt;NHibernate&lt;/a&gt;, in modo che usi anche l’ultima versione di Castle Windsor.     &lt;br /&gt;Prima della versione 2.1.x di NHibernate, la cosa non era semplicissima, dato che era presente una reference diretta agli assembly Castle.Core e Castle.DynamicProxy, quindi l’unica strada percorribile era::&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Scaricare &lt;a href="http://nhibernate.svn.sourceforge.net/viewvc/nhibernate/trunk/nhibernate/src/" target="_blank"&gt;il codice sorgente di NHibernate&lt;/a&gt;. &lt;/li&gt;    &lt;li&gt;Scaricare la versione di Castle Windsor desiderata. &lt;/li&gt;    &lt;li&gt;Copiare gli assembly Castle.Core e Castle.DynamicProxy nelle cartelle di build di NH sostituendo gli assembly esistenti. &lt;/li&gt;    &lt;li&gt;Ricompilare NHibernate. &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;Dalla versione 2.1.x di NHibernate, le cose si sono semplificate, visto che &lt;a href="http://nhforge.org/blogs/nhibernate/archive/2008/11/09/nh2-1-0-bytecode-providers.aspx" target="_blank"&gt;è stata rimossa la dipendenza diretta da Castle&lt;/a&gt;. In questo caso quindi, basta ricompilare la ProxyFactory per Castle, in questo modo:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Scaricare &lt;a href="http://nhibernate.svn.sourceforge.net/viewvc/nhibernate/trunk/nhibernate/src/" target="_blank"&gt;il codice sorgente di NHibernate&lt;/a&gt;. &lt;/li&gt;    &lt;li&gt;Cambiare le references a Castle nel progetto NHibernate.ByteCode.Castle e ricompilarlo. &lt;/li&gt;    &lt;li&gt;Fare il deploy di NHibernate.ByteCode.Castle con le references aggiornate. &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;Visto che NHibernate non ha la reference diretta all’assembly della ProxyFactory, ma viene caricata quella indicata nella proprietà &lt;em&gt;proxyfactory.factory_class&lt;/em&gt;, è abbastanza facile gestire la cosa semplicemente copiando nella cartella di output del progetto i files della versione di ProxyFactory desiderata.&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:3d27b6ce-a25d-4a46-9dee-345a7798bc26" class="wlWriterEditableSmartContent"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/.NET" rel="tag"&gt;.NET&lt;/a&gt;,&lt;a href="http://technorati.com/tags/NHibernate" rel="tag"&gt;NHibernate&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Castle" rel="tag"&gt;Castle&lt;/a&gt;&lt;/div&gt;&lt;img src="http://blogs.ugidotnet.org/Alby/aggbug/99106.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Alberto Dallagiacoma</dc:creator>
            <guid>http://blogs.ugidotnet.org/Alby/archive/2010/08/24/nuova-versione-di-castle-windsor-e-nhibernate.aspx</guid>
            <pubDate>Tue, 24 Aug 2010 15:06:00 GMT</pubDate>
            <comments>http://blogs.ugidotnet.org/Alby/archive/2010/08/24/nuova-versione-di-castle-windsor-e-nhibernate.aspx#feedback</comments>
            <slash:comments>2</slash:comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/Alby/comments/commentRss/99106.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/Alby/services/trackbacks/99106.aspx</trackback:ping>
        </item>
        <item>
            <title>Castle Scheduler</title>
            <link>http://blogs.ugidotnet.org/Alby/archive/2010/06/14/castle-scheduler.aspx</link>
            <description>&lt;p&gt;La suite &lt;a href="http://www.castleproject.org/" target="_blank"&gt;CastleProject&lt;/a&gt; si arricchisce di un nuovo componente: &lt;a href="http://using.castleproject.org/display/Comp/Castle.Components.Scheduler" target="_blank"&gt;Castle Scheduler&lt;/a&gt;.    &lt;br /&gt;Si tratta di un Job Scheduler simile al forse più famoso &lt;a href="http://quartznet.sourceforge.net/" target="_blank"&gt;Quartz.NET&lt;/a&gt;, porting della &lt;a href="http://www.quartz-scheduler.org/" target="_blank"&gt;omonima libreria Java&lt;/a&gt;.    &lt;br /&gt;Ovviamente, l’integrazione con &lt;a href="http://www.castleproject.org/container/index.html" target="_blank"&gt;Castle Windsor&lt;/a&gt; è &lt;a href="http://using.castleproject.org/display/Comp/Castle.Components.Scheduling-Tutorial" target="_blank"&gt;piuttosto semplice&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://sourceforge.net/projects/castleproject/files/Scheduler/" target="_blank"&gt;Merita un’occhiata&lt;/a&gt;.&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:ce1356aa-4922-47ae-8841-6ce52f0915ef" class="wlWriterEditableSmartContent"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/.NET" rel="tag"&gt;.NET&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Castle" rel="tag"&gt;Castle&lt;/a&gt;&lt;/div&gt;&lt;img src="http://blogs.ugidotnet.org/Alby/aggbug/98785.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Alberto Dallagiacoma</dc:creator>
            <guid>http://blogs.ugidotnet.org/Alby/archive/2010/06/14/castle-scheduler.aspx</guid>
            <pubDate>Mon, 14 Jun 2010 16:25:52 GMT</pubDate>
            <comments>http://blogs.ugidotnet.org/Alby/archive/2010/06/14/castle-scheduler.aspx#feedback</comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/Alby/comments/commentRss/98785.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/Alby/services/trackbacks/98785.aspx</trackback:ping>
        </item>
        <item>
            <title>Servizi Windows autoinstallanti</title>
            <link>http://blogs.ugidotnet.org/Alby/archive/2010/05/09/servizi-windows-autoinstallanti.aspx</link>
            <description>&lt;p&gt;E’ noto che per installare un Windows Service bisogna ricorrere al tool &lt;a href="http://msdn.microsoft.com/en-us/library/50614e95(v=VS.100).aspx"&gt;InstallUtil&lt;/a&gt;, che si occupa di eseguire tutte le configurazioni necessarie affinche il nostro eseguibile possa essere gestito come servizio di sistema.&lt;/p&gt;  &lt;p&gt;Spesso si trovano eseguibili che possono operare come servizi di sistema semplicemente invocandoli con particolari parametri sulla linea di comando, ad esempio:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;MyService.exe –installservice &lt;/li&gt;    &lt;li&gt;MyService.exe -uninstallservice &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Per aggiungere una funzionalità simile al nostro Windows Service, basta andare a curiosare all’interno di InstallUtil.exe con il fido Reflector, per accorgersi che in realtà il tool non fa altro che passare gli argomenti in ingresso sulla riga di comando alla classe &lt;a href="http://msdn.microsoft.com/en-us/library/system.configuration.install.managedinstallerclass.aspx"&gt;ManagedInstallerClass&lt;/a&gt;:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/Alby/WindowsLiveWriter/ServiziWindowsautoinstallanti_70/image_2.png"&gt;&lt;img style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" title="image" border="0" alt="image" src="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/Alby/WindowsLiveWriter/ServiziWindowsautoinstallanti_70/image_thumb.png" width="244" height="126" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Nulla ci vieta di fare la stessa cosa all’interno del nostro codice, quindi, dopo aver aggiunto la reference all’Assembly &lt;a href="http://msdn.microsoft.com/en-us/library/system.configuration.install.aspx"&gt;System.Configuration.Install&lt;/a&gt;, possiamo aggiungere due metodi che si occupano di installare o disinstallare il servizio:&lt;/p&gt;  &lt;p /&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E6:0e9c0c5e-09fd-4a03-bf33-a61e5002561d" class="wlWriterEditableSmartContent"&gt;&lt;pre style="background-color:White;overflow: auto;"&gt;&lt;span style="color: #0000FF;"&gt;using&lt;/span&gt;&lt;span style="color: #000000;"&gt; System.Reflection;
&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;using&lt;/span&gt;&lt;span style="color: #000000;"&gt; System.Configuration.Install;

&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;private&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;readonly&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;string&lt;/span&gt;&lt;span style="color: #000000;"&gt; _serviceExe &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; Assembly.GetExecutingAssembly().Location;

&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;private&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;void&lt;/span&gt;&lt;span style="color: #000000;"&gt; InstallService()
{
    ManagedInstallerClass.InstallHelper(&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;new&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;string&lt;/span&gt;&lt;span style="color: #000000;"&gt;[] { _serviceExe });
}

&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;private&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;void&lt;/span&gt;&lt;span style="color: #000000;"&gt; UninstallService()
{
    ManagedInstallerClass.InstallHelper(&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;new&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;string&lt;/span&gt;&lt;span style="color: #000000;"&gt;[] { &lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;/u&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;, _serviceExe });
}&lt;/span&gt;&lt;/pre&gt;&lt;!-- Code inserted with Steve Dunn's Windows Live Writer Code Formatter Plugin.  http://dunnhq.com --&gt;&lt;/div&gt;

&lt;p /&gt;

&lt;p&gt;Fatto questo, basta controllare quali parametri sono stati specificati sulla linea di comando ed agire di conseguenza:&lt;/p&gt;

&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E6:3d4186df-89ef-4d23-9c85-b151b177329c" class="wlWriterEditableSmartContent"&gt;&lt;pre style="background-color:#FFFFFF;overflow: auto;"&gt;&lt;span style="color: #0000FF;"&gt;if&lt;/span&gt;&lt;span style="color: #000000;"&gt; (args.Length &lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #800080;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span style="color: #000000;"&gt; (args[&lt;/span&gt;&lt;span style="color: #800080;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;].StartsWith(&lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #800000;"&gt;-&lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;) &lt;/span&gt;&lt;span style="color: #000000;"&gt;||&lt;/span&gt;&lt;span style="color: #000000;"&gt; args[&lt;/span&gt;&lt;span style="color: #800080;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;].StartsWith(&lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #800000;"&gt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;)))
{
    &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;switch&lt;/span&gt;&lt;span style="color: #000000;"&gt; (args[&lt;/span&gt;&lt;span style="color: #800080;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;].Substring(&lt;/span&gt;&lt;span style="color: #800080;"&gt;1&lt;/span&gt;&lt;span style="color: #000000;"&gt;).ToLower())
    {
        &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;case&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;installservice&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;:
            InstallService();
            &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;break&lt;/span&gt;&lt;span style="color: #000000;"&gt;;
        &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;case&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;uninstallservice&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;:
            UninstallService();
            &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;break&lt;/span&gt;&lt;span style="color: #000000;"&gt;;
    }
}&lt;/span&gt;&lt;/pre&gt;&lt;!-- Code inserted with Steve Dunn's Windows Live Writer Code Formatter Plugin.  http://dunnhq.com --&gt;&lt;/div&gt;

&lt;p&gt;In questo modo, possiamo fare il deploy del nostro servizio senza essere dipendenti da InstallUtil.&lt;/p&gt;

&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:03669941-9012-4f3f-8c5d-b3474b7fde5c" class="wlWriterEditableSmartContent"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/.NET" rel="tag"&gt;.NET&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Windows+Services" rel="tag"&gt;Windows Services&lt;/a&gt;&lt;/div&gt;&lt;img src="http://blogs.ugidotnet.org/Alby/aggbug/98530.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Alberto Dallagiacoma</dc:creator>
            <guid>http://blogs.ugidotnet.org/Alby/archive/2010/05/09/servizi-windows-autoinstallanti.aspx</guid>
            <pubDate>Sun, 09 May 2010 23:25:46 GMT</pubDate>
            <comments>http://blogs.ugidotnet.org/Alby/archive/2010/05/09/servizi-windows-autoinstallanti.aspx#feedback</comments>
            <slash:comments>3</slash:comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/Alby/comments/commentRss/98530.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/Alby/services/trackbacks/98530.aspx</trackback:ping>
        </item>
        <item>
            <title>NHibernate in applicazioni desktop</title>
            <link>http://blogs.ugidotnet.org/Alby/archive/2009/12/10/nhibernate-in-applicazioni-desktop.aspx</link>
            <description>&lt;p&gt;Ho sempre notato che la maggior parte degli esempi e della documentazione che si trova in rete su &lt;a href="http://www.nhforge.org" target="_blank"&gt;NHibernate&lt;/a&gt; riguarda applicazioni web, e per me che ho sempre dato precedenza ad applicazioni Smart Client, è stato un problema, almeno all’inizio.&lt;/p&gt;  &lt;p&gt;Fortunatamente, il solito &lt;a href="http://ayende.com/blog/" target="_blank"&gt;Ayende&lt;/a&gt; è corso in nostro aiuto: su &lt;a href="http://msdn.microsoft.com/en-us/magazine/default.aspx" target="_blank"&gt;MSDN magazine&lt;/a&gt; è stato pubblicato un suo  articolo che tratta l’utilizzo di NHibernate in un’applicazione WPF, spiegando con quali tecniche gestire la concorrenza, il databinding e la Session in un contesto molto diverso da quello web quale è l’applicazione desktop.     &lt;br /&gt;Articolo interessante che merita una lettura: lo trovate &lt;a href="http://msdn.microsoft.com/en-us/magazine/ee819139.aspx" target="_blank"&gt;qui&lt;/a&gt;.&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:ffba0a4c-4457-4133-a1d4-0d2e258f09c2" class="wlWriterEditableSmartContent"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/.NET" rel="tag"&gt;.NET&lt;/a&gt;,&lt;a href="http://technorati.com/tags/NHibernate" rel="tag"&gt;NHibernate&lt;/a&gt;&lt;/div&gt;&lt;img src="http://blogs.ugidotnet.org/Alby/aggbug/97694.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Alberto Dallagiacoma</dc:creator>
            <guid>http://blogs.ugidotnet.org/Alby/archive/2009/12/10/nhibernate-in-applicazioni-desktop.aspx</guid>
            <pubDate>Thu, 10 Dec 2009 17:50:25 GMT</pubDate>
            <comments>http://blogs.ugidotnet.org/Alby/archive/2009/12/10/nhibernate-in-applicazioni-desktop.aspx#feedback</comments>
            <slash:comments>2</slash:comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/Alby/comments/commentRss/97694.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/Alby/services/trackbacks/97694.aspx</trackback:ping>
        </item>
        <item>
            <title>Linq2NHibernate, FirstOrDefault e&amp;hellip; I Dire Straits</title>
            <link>http://blogs.ugidotnet.org/Alby/archive/2009/08/05/linq2nhibernate-firstordefault-ehellip-i-dire-straits.aspx</link>
            <description>&lt;p&gt;Tutti conosciamo i &lt;a target="_blank" href="http://it.wikipedia.org/wiki/Dire_Straits"&gt;Dire Straits&lt;/a&gt;, vero? Bene. &lt;/p&gt;
&lt;p&gt;La miglior formazione dei Dire Straits, a mio avviso, è stata quella composta da: &lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;&lt;a target="_blank" href="http://it.wikipedia.org/wiki/Mark_Knopfler"&gt;Mark Knopfler&lt;/a&gt; (voce e chitarra solista) &lt;/li&gt;
    &lt;li&gt;&lt;a target="_blank" href="http://it.wikipedia.org/wiki/John_Illsley"&gt;John Illsley&lt;/a&gt; (basso) &lt;/li&gt;
    &lt;li&gt;&lt;a target="_blank" href="http://it.wikipedia.org/wiki/Hal_Lindes"&gt;Hal Lindes&lt;/a&gt; (chitarra ritmica) &lt;/li&gt;
    &lt;li&gt;&lt;a target="_blank" href="http://it.wikipedia.org/wiki/Alan_Clark"&gt;Alan Clark&lt;/a&gt; (tastiere) &lt;/li&gt;
    &lt;li&gt;&lt;a target="_blank" href="http://it.wikipedia.org/wiki/Terry_Williams"&gt;Terry Williams&lt;/a&gt; (batteria) &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Se provassimo a mappare il tutto in un modello ad oggetti, potremmo scrivere:&lt;/p&gt;
&lt;p&gt;  &lt;/p&gt;
&lt;div class="wlWriterSmartContent" id="scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E6:f97f4fd6-c0df-4c65-9c37-4e4c8e6beb3e" style="margin: 0px; padding: 0px; float: none; display: inline;"&gt;
&lt;pre style="overflow: auto; white-space: pre-wrap; word-wrap: break-word; background-color: rgb(255, 255, 255);"&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;public&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;class&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; Band  {         &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;public&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;int&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; BandId { &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;get&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;set&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;; }         &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;public&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; IList&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;Player&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; Members { &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;get&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;set&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;; }  } &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;public&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;class&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; Player {         &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;public&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;int&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; PlayerId { &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;get&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;set&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;; }         &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;public&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;string&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; FirstName { &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;get&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;set&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;; }     &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;public&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;string&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; LastName { &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;get&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;set&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;; }     &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;public&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; Band Band { &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;get&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;set&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;; } } &lt;/span&gt;&lt;/pre&gt;
&lt;!-- Code inserted with Steve Dunn's Windows Live Writer Code Formatter Plugin.  http://dunnhq.com --&gt;&lt;/div&gt;
&lt;p&gt;  &lt;/p&gt;
&lt;p&gt;E ora che abbiamo Linq2NHibernate possiamo scrivere una cosa del tipo: &lt;/p&gt;
&lt;p&gt;  &lt;/p&gt;
&lt;div class="wlWriterSmartContent" id="scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E6:46936d2f-62e2-489f-bbd9-927702c52440" style="margin: 0px; padding: 0px; float: none; display: inline;"&gt;
&lt;pre style="overflow: auto; white-space: pre-wrap; word-wrap: break-word; background-color: rgb(255, 255, 255);"&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;using&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; (ISession session &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; SessionHelper.OpenSession())  {     Band myBand &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; session.Linq&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;Band&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;().Expand(&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;Members&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;)                     .Where&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;Band&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;(bnd &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; bnd.BandId &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;==&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;1&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;)                     .FirstOrDefault&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;Band&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;();     Console.WriteLine(&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;Nome band: {0}, numero di componenti: {1}&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;,          myBand.Name,          myBand.Members.Count);  } &lt;/span&gt;&lt;/pre&gt;
&lt;!-- Code inserted with Steve Dunn's Windows Live Writer Code Formatter Plugin.  http://dunnhq.com --&gt;&lt;/div&gt;
&lt;p&gt;  &lt;/p&gt;
&lt;p&gt;L'output però non è quello che ci aspettiamo: &lt;/p&gt;
&lt;p&gt;Nome band: Dire Straits, numero di componenti: 1 &lt;/p&gt;
&lt;p&gt;La causa è nel codice SQL generato da Linq2NHibernate, che, da Profiler, risulta essere questo:&lt;/p&gt;
&lt;p&gt;  &lt;/p&gt;
&lt;div class="wlWriterSmartContent" id="scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E6:9770c189-e3f8-494f-b180-2e3b4038af88" style="margin: 0px; padding: 0px; float: none; display: inline;"&gt;
&lt;pre style="overflow: auto; white-space: pre-wrap; word-wrap: break-word; background-color: rgb(255, 255, 255);"&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;exec&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; sp_executesql N&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;SELECT top 1 this_.BandId as BandId4_1_,  this_.Name as Name4_1_, members2_.BandId as BandId3_,  members2_.PlayerId as PlayerId3_, members2_.PlayerId as PlayerId2_0_,  members2_.FirstName as FirstName2_0_, members2_.LastName as LastName2_0_, members2_.BandId as BandId2_0_  FROM dbo.Band this_      left outer join dbo.Player members2_ on          this_.BandId=members2_.BandId  WHERE this_.BandId = @p0&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;,N&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;@p0 int&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;,&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;@p0&lt;/span&gt;&lt;span style="color: rgb(128, 128, 128);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-weight: bold;"&gt;1&lt;/span&gt;&lt;/pre&gt;
&lt;!-- Code inserted with Steve Dunn's Windows Live Writer Code Formatter Plugin.  http://dunnhq.com --&gt;&lt;/div&gt;
&lt;p&gt;  &lt;/p&gt;
&lt;p&gt;In pratica, la chiamata a FirstOrDefault() aggiunge quel TOP 1 all’SQL generato, che fa sì che venga ritornata solo una riga ritornata dal DB, falsando il conteggio.    &lt;br /&gt;
I modi per risolvere la questione sono due: &lt;/p&gt;
&lt;ol&gt;
    &lt;li&gt;Tornare ad usare la Criteria API :). &lt;/li&gt;
    &lt;li&gt;Sostituire &lt;font face="Courier New" size="2"&gt;FirstOrDefault&amp;lt;Band&amp;gt;()&lt;/font&gt; con &lt;font face="Courier New" size="2"&gt;ToList&amp;lt;Band&amp;gt;()[0]&lt;/font&gt;. &lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;In questo modo, la clausola TOP sparisce e i Dire Straits tornano ad essere cinque: &lt;/p&gt;
&lt;p&gt;Nome band: Dire Straits, numero di componenti: 5&lt;/p&gt;
&lt;div class="wlWriterEditableSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:a07a64ca-a579-4a80-8339-a01a9bad93a1" style="margin: 0px; padding: 0px; float: none; display: inline;"&gt;Technorati Tags: &lt;a rel="tag" href="http://technorati.com/tags/.NET"&gt;.NET&lt;/a&gt;,&lt;a rel="tag" href="http://technorati.com/tags/NHibernate"&gt;NHibernate&lt;/a&gt;,&lt;a rel="tag" href="http://technorati.com/tags/Linq"&gt;Linq&lt;/a&gt;&lt;/div&gt;&lt;img src="http://blogs.ugidotnet.org/Alby/aggbug/96827.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Alberto Dallagiacoma</dc:creator>
            <guid>http://blogs.ugidotnet.org/Alby/archive/2009/08/05/linq2nhibernate-firstordefault-ehellip-i-dire-straits.aspx</guid>
            <pubDate>Wed, 05 Aug 2009 14:50:00 GMT</pubDate>
            <comments>http://blogs.ugidotnet.org/Alby/archive/2009/08/05/linq2nhibernate-firstordefault-ehellip-i-dire-straits.aspx#feedback</comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/Alby/comments/commentRss/96827.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/Alby/services/trackbacks/96827.aspx</trackback:ping>
        </item>
        <item>
            <title>Rilasciato NHibernate 2.1.0</title>
            <link>http://blogs.ugidotnet.org/Alby/archive/2009/07/20/rilasciato-nhibernate-2.1.0.aspx</link>
            <description>&lt;p&gt;E’ stata rilasciata la &lt;a href="http://sourceforge.net/projects/nhibernate/"&gt;versione 2.1.0&lt;/a&gt; di &lt;a href="http://www.nhforge.org"&gt;NHibernate&lt;/a&gt;. Qualche novità:&lt;/p&gt;  &lt;p&gt;1. Supporto diretto a SQL Server 2008 (MSSql2008Dialect); NHibernate può usare i tipi di dato &lt;em&gt;Date&lt;/em&gt;, &lt;em&gt;Time&lt;/em&gt;, &lt;em&gt;DateTime2&lt;/em&gt;, &lt;em&gt;DateTimeOffset&lt;/em&gt;.&lt;/p&gt;  &lt;p&gt;2. Nuovi &lt;a href="http://feedproxy.google.com/~r/NHibernateBlog/~3/SZ1UkIBlTY4/nh2-1-0-new-generators.aspx"&gt;ID Generators&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;3. Executable HQL. E’ possibile scrivere una cosa del tipo:&lt;/p&gt;  &lt;div class="csharpcode"&gt;   &lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; (ISession session = GetSession())&lt;/pre&gt;

  &lt;pre&gt;{&lt;/pre&gt;

  &lt;pre class="alt"&gt;    &lt;span class="kwrd"&gt;using&lt;/span&gt; (ITransaction tx = session.BeginTransaction())&lt;/pre&gt;

  &lt;pre&gt;    { &lt;/pre&gt;

  &lt;pre class="alt"&gt;        session.CreateQuery(&lt;span class="str"&gt;"delete from MyEntity"&lt;/span&gt;).ExecuteUpdate();  &lt;/pre&gt;

  &lt;pre&gt;        tx.Commit();&lt;/pre&gt;

  &lt;pre class="alt"&gt;    }&lt;/pre&gt;

  &lt;pre&gt;}&lt;/pre&gt;
&lt;/div&gt;
&lt;style type="text/css"&gt;&lt;![CDATA[




.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }]]&gt;&lt;/style&gt;

&lt;p&gt;4. Rimozione della dipendenza da Castle.DynamicProxy2 (informazioni &lt;a href="http://nhforge.org/blogs/nhibernate/archive/2008/10/11/nh2-1-0-reference-to-castle-removed.aspx"&gt;qui&lt;/a&gt; e &lt;a href="http://nhforge.org/blogs/nhibernate/archive/2008/11/09/nh2-1-0-bytecode-providers.aspx"&gt;qui&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;In ogni modo, la lettura del file releasenotes.txt è sempre consigliata.&lt;/p&gt;&lt;img src="http://blogs.ugidotnet.org/Alby/aggbug/96730.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Alberto Dallagiacoma</dc:creator>
            <guid>http://blogs.ugidotnet.org/Alby/archive/2009/07/20/rilasciato-nhibernate-2.1.0.aspx</guid>
            <pubDate>Mon, 20 Jul 2009 09:49:53 GMT</pubDate>
            <comments>http://blogs.ugidotnet.org/Alby/archive/2009/07/20/rilasciato-nhibernate-2.1.0.aspx#feedback</comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/Alby/comments/commentRss/96730.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/Alby/services/trackbacks/96730.aspx</trackback:ping>
        </item>
    </channel>
</rss>