<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://dotnetside.org/utility/FeedStylesheets/atom.xsl" media="screen"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="it"><title type="html">.Net Café</title><subtitle type="html">Il blog di Leonardo Alario</subtitle><id>http://dotnetside.org/blogs/leo/atom.aspx</id><link rel="alternate" type="text/html" href="http://dotnetside.org/blogs/leo/default.aspx" /><link rel="self" type="application/atom+xml" href="http://dotnetside.org/blogs/leo/atom.aspx" /><generator uri="http://communityserver.org" version="4.0.30619.63">Community Server</generator><updated>2007-10-25T00:02:41Z</updated><entry><title>Linq to SQL recuperare valori di tipo identity</title><link rel="alternate" type="text/html" href="/blogs/leo/archive/2008/08/02/Linq-to-SQL-recuperare-valori-di-tipo-identity.aspx" /><id>/blogs/leo/archive/2008/08/02/Linq-to-SQL-recuperare-valori-di-tipo-identity.aspx</id><published>2008-08-02T09:42:15Z</published><updated>2008-08-02T09:42:15Z</updated><content type="html">&lt;p&gt;A volte, può capitare di aver bisogno di recuperare il valore di una proprietà di tipo identity, nella nostra DAL contestualmente all'inserimento della tupla, nulla di più facile.  &lt;p&gt;Riprendendo l'esempio del mio post precedente della gestione utenti, ho la classe Utente nel mio DM che espone la proprietà di tipo int IdUtente :  &lt;p&gt;[Column(Storage="_IdUtente", AutoSync=AutoSync.OnInsert, DbType="Int NOT NULL IDENTITY", IsPrimaryKey=true, IsDbGenerated=true)]&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public int IdUtente&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; get&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return this._IdUtente;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if ((this._IdUtente != value))&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&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; this.OnIdUtenteChanging(value);&lt;br&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; this.SendPropertyChanging();&lt;br&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; this._IdUtente = value;&lt;br&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; this.SendPropertyChanged("IdUtente");&lt;br&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; this.OnIdUtenteChanged();&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }  &lt;p&gt;Nella DAL quando l'utente è "persistito", ne recuperiamo l'identity assegnato :  &lt;p&gt;public int SalvaUtente(BOL.Utente utente)&lt;br&gt;{  &lt;p&gt;int idUtente;  &lt;p&gt;&amp;nbsp;&amp;nbsp; try  &lt;p&gt;&amp;nbsp;&amp;nbsp; {&lt;br&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; GestioneUtentiDataContext Dt = new GestioneUtentiDataContext();  &lt;p&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; using (TransactionScope Ts = new TransactionScope())&lt;br&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;p&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; Dt.Utentes.InsertOnSubmit(utente);&lt;br&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; Dt.SubmitChanges();  &lt;p&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; // recupero il valore autogenerato dall'identity nel database  &lt;p&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; idUtente = utente.IdUtente;  &lt;p&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;br&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; Ts.Complete();  &lt;p&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; return idUtente;  &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; catch&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; throw;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }  &lt;p&gt;}  &lt;p&gt;Questo meccanismo funziona anche in scenari più complessi, inoltre IMHO, é sempre meglio racchiudere il tutto in un gestore di transazioni per assicurare l'atomicità dell'operazione. Se qualcosa dovesse andare storto in operazioni correlate nella stessa transazione, il valore identity sarà "bruciato".&lt;/p&gt;&lt;img src="http://dotnetside.org/aggbug.aspx?PostID=20995" width="1" height="1"&gt;</content><author><name>leo.alario</name><uri>http://dotnetside.org/members/leo.alario/default.aspx</uri></author><category term=".NET 3.5" scheme="http://dotnetside.org/blogs/leo/archive/tags/.NET+3.5/default.aspx" /><category term="Linq to Sql" scheme="http://dotnetside.org/blogs/leo/archive/tags/Linq+to+Sql/default.aspx" /></entry><entry><title>Linq to Sql caricamento e filtraggio immediato dei dati correlati con la classe DataLoadOptions.</title><link rel="alternate" type="text/html" href="/blogs/leo/archive/2008/07/12/Linq-to-Sql-caricamento-e-filtraggio-immediato-dei-dati-correlati-con-la-classe-DataLoadOptions_2E00_.aspx" /><id>/blogs/leo/archive/2008/07/12/Linq-to-Sql-caricamento-e-filtraggio-immediato-dei-dati-correlati-con-la-classe-DataLoadOptions_2E00_.aspx</id><published>2008-07-12T10:24:26Z</published><updated>2008-07-12T10:24:26Z</updated><content type="html">&lt;p&gt;Durante lo sviluppo di un componente, che utilizza &lt;a href="http://msdn.microsoft.com/it-it/library/bb386976.aspx"&gt;Linq to Sql&lt;/a&gt;, nello specifico, un componente che si occupa di gestire gruppi e i relativi utenti , sono incappato in un problema legato alle politiche di &lt;em&gt;caricamento dei dati &lt;/em&gt;&lt;em&gt;utilizzate da Linq to Sql, dovuto alla particolare logica, alla base della mia applicazione. &lt;/em&gt;&lt;/p&gt; &lt;p&gt;&lt;em&gt;La mia esigenza é quella di caricare i gruppi con i relativi utenti associati, recuperando solo gli quelli non cancellati logicamente, ovvero gestiti sulla relativa tabella tramite un flag "obsoleto" che può assumere valore "S" o "N". &lt;/em&gt;&lt;/p&gt; &lt;p&gt;Di default, Linq to Sql carica tutti i gruppi ed i relativi utenti associati sia cancellati logicamente, che attivi.&lt;/p&gt; &lt;p&gt;Per ovviare al problema avrei potuto "spegnere" la proprietà DeferredLoadingEnabled del DataContext, che istruisce opportunamente il framework a adottare politiche di caricamento di tipo lazy loading&amp;nbsp; e che mi avrebbe permesso in seguito, di caricare per ogni singolo gruppo gli utenti non obsoleti. Ma poiché lavoro con pochi dati, quindi non ho problemi di performance ed é molto comodo ottenere tutto quello che mi serve con un'unica chiamata, ho optato per un'altra soluzione.&lt;/p&gt; &lt;p&gt;Per ottenere il risultato desiderato ho utilizzato la classe &lt;a href="http://msdn.microsoft.com/it-it/library/system.data.linq.dataloadoptions.aspx"&gt;DataLoadOptions&lt;/a&gt; che fornisce le funzionalità per il caricamento e/o il filtraggio immediati dei dati correlati.&lt;/p&gt; &lt;p&gt;La seguente snippet di codice illustra il funzionamento della classe : &lt;p&gt;public class Gruppo&lt;br&gt;{&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; private IEnumerable&amp;lt;BOL.Gruppo&amp;gt; Gruppi = null;  &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public IEnumerable&amp;lt;BOL.Gruppo&amp;gt; GetGruppi()&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; try&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&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; GestioneUtentiDataContext Dt = new GestioneUtentiDataContext();&lt;br&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; DataLoadOptions dlo = new DataLoadOptions();&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;/p&gt; &lt;p&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; // filtro gli utenti del gruppo recuperandone solo quelli non cancellati&amp;nbsp; logicamente&lt;br&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; dlo.AssociateWith&amp;lt;BOL.Gruppo&amp;gt;(g =&amp;gt; g.Utentes.Where( u =&amp;gt; u.obsoleto.Equals('N')));&lt;br&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; Dt.LoadOptions = dlo; &lt;/p&gt; &lt;p&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; Gruppi = from Gruppis in Dt.Gruppos&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; where Gruppis.Obsoleto.Equals('N')&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; orderby Gruppis.Descrizione ascending&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; select Gruppis;&lt;br&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; return Gruppi;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; catch&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&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; throw;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;p&gt;}&lt;/p&gt;&lt;img src="http://dotnetside.org/aggbug.aspx?PostID=20358" width="1" height="1"&gt;</content><author><name>leo.alario</name><uri>http://dotnetside.org/members/leo.alario/default.aspx</uri></author><category term=".NET 3.5" scheme="http://dotnetside.org/blogs/leo/archive/tags/.NET+3.5/default.aspx" /><category term="Linq to Sql" scheme="http://dotnetside.org/blogs/leo/archive/tags/Linq+to+Sql/default.aspx" /></entry><entry><title>WindowsClient.Net</title><link rel="alternate" type="text/html" href="/blogs/leo/archive/2008/02/09/WindowsClient.Net.aspx" /><id>/blogs/leo/archive/2008/02/09/WindowsClient.Net.aspx</id><published>2008-02-09T20:38:33Z</published><updated>2008-02-09T20:38:33Z</updated><content type="html">&lt;p&gt;Da qualche giorno é possibile aprire un &lt;a href="http://windowsclient.net/community/blog-with-us.aspx"&gt;blog&lt;/a&gt; su &lt;a href="http://windowsclient.net/"&gt;WindowsClient.Net&lt;/a&gt;, comunità online di Microsoft dedicata a tecnologie client (Windows&amp;nbsp;Form, WPF, ect.&amp;nbsp;). &lt;/p&gt; &lt;p&gt;&lt;a href="http://blogs.windowsclient.net/leoalario/"&gt;Io lo ho gia fatto&lt;/a&gt;, così posso magari scrivere qualche post in inglese sulla "robaccia client",&amp;nbsp;&amp;nbsp;che tanto mi piace. &amp;nbsp;&lt;img src="http://www.dotnetside.org/emoticons/emotion-2.gif"&gt;&lt;/p&gt;&lt;img src="http://dotnetside.org/aggbug.aspx?PostID=15366" width="1" height="1"&gt;</content><author><name>leo.alario</name><uri>http://dotnetside.org/members/leo.alario/default.aspx</uri></author><category term="WPF" scheme="http://dotnetside.org/blogs/leo/archive/tags/WPF/default.aspx" /><category term="Client" scheme="http://dotnetside.org/blogs/leo/archive/tags/Client/default.aspx" /><category term="Windows Form" scheme="http://dotnetside.org/blogs/leo/archive/tags/Windows+Form/default.aspx" /><category term="Blog" scheme="http://dotnetside.org/blogs/leo/archive/tags/Blog/default.aspx" /></entry><entry><title>Software as a Service - il software del futuro o del presente ?</title><link rel="alternate" type="text/html" href="/blogs/leo/archive/2008/02/08/Software-as-a-Service-_2D00_-il-software-del-futuro-o-del-presente-_3F00_.aspx" /><id>/blogs/leo/archive/2008/02/08/Software-as-a-Service-_2D00_-il-software-del-futuro-o-del-presente-_3F00_.aspx</id><published>2008-02-09T07:15:59Z</published><updated>2008-02-09T07:15:59Z</updated><content type="html">&lt;p&gt;Durante l'evento "&lt;a href="http://dotnetside.org/blogs/vito/archive/2008/01/26/Concordo-pienamente_2E002E002E00_.aspx"&gt;Inside&lt;/a&gt; &lt;a href="http://dotnetside.org/blogs/fabio/archive/2008/01/26/Emozioni.aspx"&gt;Sharepoint&lt;/a&gt;", &lt;a href="http://www.dotnet2themax.it/Team.aspx"&gt;Giuseppe Dimauro&lt;/a&gt; nella sua sessione,&amp;nbsp;&amp;nbsp;ha parlato del modello applicativo "software come servizio", affermando che&amp;nbsp;presto potremmo essere costretti a rivedere, sia&amp;nbsp;il modo con cui concepire il nostro software, ma soprattutto il modo in cui lo stesso &amp;nbsp;viene sviluppato, venduto, acquistato ed infine&amp;nbsp;utilizzato.&lt;/p&gt; &lt;p&gt;La cosa mi ha incuriosito molto, anche perché nell'azienda in cui lavoro sì era&amp;nbsp;parlato di reingegnerizzare un software esistente utilizzando questo modello,&amp;nbsp;&amp;nbsp; "googlando" ho trovato &lt;a href="http://www.microsoft.com/italy/msdn/library/architects/ArchStratCtchLngTail.mspx"&gt;questo interessante articolo&lt;/a&gt;, che&amp;nbsp;descrive molto dettagliatamente il modello &lt;a href="http://en.wikipedia.org/wiki/Software_as_a_Service"&gt;SaaS&lt;/a&gt; in tutti i suoi aspetti. &lt;p&gt;Piccola considerazione personale, forse in Italia e soprattutto nel nostro amato sud, non siamo ancora pronti per utilizzare questo tipo di modello in quanto i clienti, nonostante i vari vantaggi che porterebbe agli stessi (abbattimento dei costi hardware, abbattimento dei costi del software ect.) non vedrebbero di buon occhio il fatto che i loro&amp;nbsp;preziosi dati siano in housing chissà dove&amp;nbsp;e peggio ancora che i loro dati siano condivisi con altri dati di altri clienti.  &lt;p&gt;Staremo a vedere ... &lt;img src="http://dotnetside.org/aggbug.aspx?PostID=15332" width="1" height="1"&gt;</content><author><name>leo.alario</name><uri>http://dotnetside.org/members/leo.alario/default.aspx</uri></author><category term="SaaS" scheme="http://dotnetside.org/blogs/leo/archive/tags/SaaS/default.aspx" /><category term="Software as a Service" scheme="http://dotnetside.org/blogs/leo/archive/tags/Software+as+a+Service/default.aspx" /><category term="Architettura delle applicazioni" scheme="http://dotnetside.org/blogs/leo/archive/tags/Architettura+delle+applicazioni/default.aspx" /></entry><entry><title>Disponibile il language pack in italiano del .Net framework 3.5</title><link rel="alternate" type="text/html" href="/blogs/leo/archive/2008/01/29/Disponibile-il-language-pack-in-italiano-del-.Net-framework-3.5.aspx" /><id>/blogs/leo/archive/2008/01/29/Disponibile-il-language-pack-in-italiano-del-.Net-framework-3.5.aspx</id><published>2008-01-30T05:51:24Z</published><updated>2008-01-30T05:51:24Z</updated><content type="html">&lt;p&gt;La notizia é fresca fresca, finalmente é disponibile il &lt;a href="http://download.microsoft.com/download/5/a/4/5a47ba86-4c52-4772-a82a-72b6ee5edf54/dotnetfx35langpack_x86it.exe"&gt;language pack in italiano&amp;nbsp;del .NET framework 3.5&lt;/a&gt;. Oltre a questo&amp;nbsp;aggiornamento&amp;nbsp;&amp;nbsp;sono stati rilasciati dal team di sviluppo, anche alcuni componenti&amp;nbsp;ridistribuibili. Inoltre&amp;nbsp;é imminente il rilascio di Visual Studio 2008 in italiano, questo dovrebbe avvenire nei primi giorni di febbraio.&lt;/p&gt; &lt;p&gt;Altri dettagli alla &lt;a href="http://blogs.msdn.com/italy/archive/2008/01/29/visual-studio-2008-in-italiano.aspx"&gt;fonte&lt;/a&gt;&lt;/p&gt;&lt;img src="http://dotnetside.org/aggbug.aspx?PostID=14859" width="1" height="1"&gt;</content><author><name>leo.alario</name><uri>http://dotnetside.org/members/leo.alario/default.aspx</uri></author><category term=".NET 3.5" scheme="http://dotnetside.org/blogs/leo/archive/tags/.NET+3.5/default.aspx" /><category term="VS 2008" scheme="http://dotnetside.org/blogs/leo/archive/tags/VS+2008/default.aspx" /></entry><entry><title>Microsoft Parallel Extensions to .NET Framework 3.5 December 2007 CTP</title><link rel="alternate" type="text/html" href="/blogs/leo/archive/2007/12/09/Microsoft-Parallel-Extensions-to-.NET-Framework-3.5-December-2007-CTP.aspx" /><id>/blogs/leo/archive/2007/12/09/Microsoft-Parallel-Extensions-to-.NET-Framework-3.5-December-2007-CTP.aspx</id><published>2007-12-10T07:00:13Z</published><updated>2007-12-10T07:00:13Z</updated><content type="html">&lt;p&gt;Finalmente é stata rilasciata l'estensione del .NET framework 3.5 &lt;strong&gt;ParallelFX&lt;/strong&gt; ,&amp;nbsp;anche se solo in CTP, &amp;nbsp;che permette ai nostri programmi (Windows, web o servizi) l'esecuzione parallela su più processori (dove disponibili), sfruttando appieno le macchine multiprocessore e di conseguenza determinando un significativo aumento di prestazioni per le nostre applicazioni.&lt;/p&gt; &lt;p align="center"&gt;&lt;a href="http://www.oertrani.org/public/MicrosoftParallelExtens.5December2007CTP_14108/fig023.gif"&gt;&lt;img height="332" src="http://www.oertrani.org/public/MicrosoftParallelExtens.5December2007CTP_14108/fig02_thumb1.gif" width="392"&gt;&lt;/a&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Il framework introduce: &lt;/p&gt; &lt;ul&gt; &lt;li&gt;API per la parallelizzazione di cicli for e foreach;  &lt;li&gt;modello dichiarativo per le query LINQ To Objects;  &lt;li&gt;classi per la sincronizzazione dei task;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;Potete scaricare l'estensione &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=e848dc1d-5be3-4941-8705-024bc7f180ba&amp;amp;displaylang=en" target="_blank"&gt;qui,&lt;/a&gt; inoltre contestualmente al rilascio dell'estensione, é stata lanciata &lt;a href="http://msdn2.microsoft.com/en-us/concurrency/default.aspx"&gt;una nuova sezione di MSDN dedicata al parallel computing&lt;/a&gt;. &lt;/p&gt; &lt;p&gt;Non vedevo l'ora che fosse disponibile, mi ci butto a capo fitto :P:P:P&lt;/p&gt;&lt;img src="http://dotnetside.org/aggbug.aspx?PostID=13202" width="1" height="1"&gt;</content><author><name>leo.alario</name><uri>http://dotnetside.org/members/leo.alario/default.aspx</uri></author><category term=".NET 3.5" scheme="http://dotnetside.org/blogs/leo/archive/tags/.NET+3.5/default.aspx" /><category term="Parallel Computing" scheme="http://dotnetside.org/blogs/leo/archive/tags/Parallel+Computing/default.aspx" /><category term="ParallelFX" scheme="http://dotnetside.org/blogs/leo/archive/tags/ParallelFX/default.aspx" /></entry><entry><title>Schedulare Jobs In Sql Server 2005 Express</title><link rel="alternate" type="text/html" href="/blogs/leo/archive/2007/10/25/Schedulare-Jobs-In-Sql-Server-2005-Express.aspx" /><id>/blogs/leo/archive/2007/10/25/Schedulare-Jobs-In-Sql-Server-2005-Express.aspx</id><published>2007-10-25T07:02:41Z</published><updated>2007-10-25T07:02:41Z</updated><content type="html">&lt;p&gt;Purtroppo, nella versione Express&amp;nbsp;di Sql Server 2005&amp;nbsp;é assente un utile strumento di lavoro come SQL Server Agent,&amp;nbsp;disponibile nella versione MSDE che&amp;nbsp;permette di schedulare&amp;nbsp;attività sistemistiche-amministrative&amp;nbsp;&amp;nbsp;sui database (Backup notturni, Ricostruzione indici, ect).&lt;/p&gt; &lt;p&gt;In alternativa, ci sono diverse strade da seguire per ovviare a questo problema : &lt;/p&gt; &lt;ol&gt; &lt;li&gt;Utilizzare le scheduler di Windows in combinazione al comando sqlcmd.exe per lanciare i nostri script; &lt;/li&gt; &lt;li&gt;Utilizzare le classi contenute nel Namespace&amp;nbsp;&lt;a href="http://technet.microsoft.com/en-us/library/microsoft.sqlserver.management.smo.smoobjectbase.aspx" target="_blank"&gt;Microsoft.SqlServer.Management.Smo&lt;/a&gt;&amp;nbsp;combinate al .Net Framework;&lt;/li&gt;&lt;/ol&gt; &lt;p&gt;Per esigenze aziendali, avevo bisogno di uno strumento con le caratteristiche di Sql Server Agent,&amp;nbsp;"googlando" mi sono imbattuto&amp;nbsp;in questo prodotto&amp;nbsp;&lt;a href="http://www.lazycoding.com/products.aspx" target="_blank"&gt;SQLScheduler&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;a href="http://www.lazycoding.com/products.aspx" target="_blank"&gt;SQLScheduler&lt;/a&gt; é una applicazione .NET, scritta in C#, composta da un servizio ed una Windows Form che permette di: &lt;/p&gt; &lt;ol&gt; &lt;li&gt;Gestire diverse istanze di SQL Server Express; &lt;li&gt;Schedulare dei job definendone l'inizio, la fine e la ricorrenza; &lt;li&gt;Inviare a più operatori le mail con i risultati dei job;&lt;/li&gt;&lt;/ol&gt; &lt;p&gt;Il tutto é completamente gratuito. &lt;/p&gt;&lt;img src="http://dotnetside.org/aggbug.aspx?PostID=10956" width="1" height="1"&gt;</content><author><name>leo.alario</name><uri>http://dotnetside.org/members/leo.alario/default.aspx</uri></author></entry></feed>