Tools http://blogs.ugidotnet.org/PietroLibroBlog/category/Tools.aspx Tools it-IT Pietro Libro pietro.libro@libero.it Subtext Version 2.6.0.0 Documentazione EF 7 (Beta 5) http://blogs.ugidotnet.org/PietroLibroBlog/archive/2015/07/22/documentazione-ef-7-beta-5.aspx Documentazione "Work in Progress" della prossima release di Entity Framework : <a href="http://ef.readthedocs.org/en/latest/" target="_blank">http://ef.readthedocs.org/en/latest/</a><img src="http://blogs.ugidotnet.org/PietroLibroBlog/aggbug/102030.aspx" width="1" height="1" /> Pietro Libro http://blogs.ugidotnet.org/PietroLibroBlog/archive/2015/07/22/documentazione-ef-7-beta-5.aspx Wed, 22 Jul 2015 09:07:28 GMT http://blogs.ugidotnet.org/PietroLibroBlog/archive/2015/07/22/documentazione-ef-7-beta-5.aspx#feedback http://blogs.ugidotnet.org/PietroLibroBlog/comments/commentRss/102030.aspx http://blogs.ugidotnet.org/PietroLibroBlog/services/trackbacks/102030.aspx JSON.Merge http://blogs.ugidotnet.org/PietroLibroBlog/archive/2014/08/29/json.merge.aspx <p>Un’interessante novità introdotta con la versione 6.0 release 4 di Json.NET è la possibilità di eseguire il <em>Merge</em> (utilizzando 4 possibili “variazioni”) di oggetti <em>JObject</em> e <em>Jarray</em>. Un rapido esempio, tramite Web Api:</p> <pre class="brush: csharp;">[HttpPost] public void JsonStringPost([FromBody]string value) { JObject jCar = JObject.Parse(value); JObject jOptional = JObject.Parse(@"{Optionals :['Air Conditioned','Smoker'] }"); jCar.Merge(jOptional, new JsonMergeSettings() { MergeArrayHandling = MergeArrayHandling.Union }); string jsonFormat = jCar.ToString(); Car mergedCar = jCar.ToObject&lt;Car&gt;(); }</pre> <p>Dove <em>l’Action</em> “JsonStringPost” accetta una stringa tipo:</p> <p>"{ 'Brand': 'Ferrari','Model': 'f450 Modena','Optionals': [] }"</p> <p>Utilizzando, ad esempio il <em>Composer</em> di strumenti come <a href="http://www.telerik.com/fiddler" target="_blank">Fiddler2</a> possiamo invocare il servizio:</p> <a href="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/PietroLibroBlog/Windows-Live-Writer/JSON.Merge_A854/image_5.png"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; border-top-width: 0px; margin-right: auto" border="0" alt="image" src="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/PietroLibroBlog/Windows-Live-Writer/JSON.Merge_A854/image_thumb_1.png" width="244" height="238" /></a> <p>Per ottenere una nuova istanza di <em>Car</em> con tutti gli <em>Optionals</em>:</p> <p><a href="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/PietroLibroBlog/Windows-Live-Writer/JSON.Merge_A854/image_7.png"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; border-top-width: 0px; margin-right: auto" border="0" alt="image" src="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/PietroLibroBlog/Windows-Live-Writer/JSON.Merge_A854/image_thumb_2.png" width="244" height="74" /></a></p> <p>Se il nostro servizio accetta direttamente un’istanza di oggetto invece di una stringa in formato JSON, il nostro codice cambia leggermente, come di seguito:</p> <pre class="brush: csharp;">[HttpPost] public void JsonObjectPost([FromBody] Car carByPost) { JObject jCar = JObject.FromObject(carByPost); JObject jOptional = JObject.Parse(@"{Optionals :['Air Conditioned','Smoker'] }"); jCar.Merge(jOptional, new JsonMergeSettings() { MergeArrayHandling = MergeArrayHandling.Union }); string jsonFormat = jCar.ToString(); Car mergedCar = jCar.ToObject<car>(); }</car></pre> <p>Dove utilizziamo il metodo <em>FromObject</em> della classe <em>JObject</em> invece di <em>Parse. </em>Utilizzando Fiddler, passando come <em>Body</em> del messaggio la stringa (senza i doppi apici ad inizio e fine stringa)</p> <p>{ 'Brand': 'Ferrari','Model': 'f450 Modena','Optionals': [] }</p> <p>Otteniamo (ovviamente) lo stesso risultato dell’invocazione precedente. E’ possibile modificare il comportamento di “Merge” utilizzando l’enumerazione <em>MergeArrayHandling. </em>La classe <em>Car </em>(C#) è descritta nell’esempio, è la seguente:</p> <pre class="brush: csharp;">public class Car { public string Brand { get; set; } public string Model { get; set; } public string[] Optionals { get; set; } }</pre> <p>La lista completa delle <em>features</em> aggiunte nel rilascio della versione 6.0 release 4 è disponibile <a href="http://james.newtonking.com/archive/2014/08/04/json-net-6-0-release-4-json-merge-dependency-injection" target="_blank">qui</a>.</p><img src="http://blogs.ugidotnet.org/PietroLibroBlog/aggbug/101880.aspx" width="1" height="1" /> Pietro Libro http://blogs.ugidotnet.org/PietroLibroBlog/archive/2014/08/29/json.merge.aspx Fri, 29 Aug 2014 13:30:00 GMT http://blogs.ugidotnet.org/PietroLibroBlog/archive/2014/08/29/json.merge.aspx#feedback http://blogs.ugidotnet.org/PietroLibroBlog/comments/commentRss/101880.aspx http://blogs.ugidotnet.org/PietroLibroBlog/services/trackbacks/101880.aspx Dynamic Data Provider per EF6 released http://blogs.ugidotnet.org/PietroLibroBlog/archive/2014/03/03/dynamic-data-provider-per-ef6-released.aspx <p>Sono stati rilasciati in RTM, <em>ASP.NET Dynamic Data</em> e <em>EntityDataSource</em> per EntityFrameowrk 6. Per provare la nuova versione di <em>Dynamic Data</em> è sufficiente creare un nuovo progetto di tipo “ASP.NET Dynamic Data Entities Web Application”, ed installare tramite NuGet il package <em>Microsoft.AspNet.DynamicData.EFProvider</em>:</p> <p align="center"><a href="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/PietroLibroBlog/Windows-Live-Writer/3b52774302cc_7140/image_2.png"><img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="image" src="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/PietroLibroBlog/Windows-Live-Writer/3b52774302cc_7140/image_thumb.png" width="244" height="33" /></a></p> <p>Eventualmente forziamo la scrittura dei <em>Template</em> (“A” per sovrascrivere tutto):</p> <p><a href="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/PietroLibroBlog/Windows-Live-Writer/3b52774302cc_7140/image_4.png"><img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; border-left: 0px; display: block; padding-right: 0px; margin-right: auto" border="0" alt="image" src="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/PietroLibroBlog/Windows-Live-Writer/3b52774302cc_7140/image_thumb_1.png" width="244" height="39" /></a></p> <p>Aggiungiamo in modalità <em>Code First</em> una semplice classe <em>Book </em>e relativo <em>DbContext</em>:</p> <pre class="csharpcode"><span class="kwrd">public</span> <span class="kwrd">class</span> Book { <span class="kwrd">public</span> <span class="kwrd">int</span> Id { get; set; } <span class="kwrd">public</span> <span class="kwrd">string</span> Title { get; set; } <span class="kwrd">public</span> <span class="kwrd">string</span> Authors { get; set; } <span class="kwrd">public</span> <span class="kwrd">int</span> Pages { get; set; } } <span class="kwrd">public</span> <span class="kwrd">class</span> Db : DbContext { <span class="kwrd">public</span> DbSet&lt;Book&gt; Books { get; set; } <span class="kwrd">protected</span> <span class="kwrd">override</span> <span class="kwrd">void</span> OnModelCreating(DbModelBuilder modelBuilder) { <span class="kwrd">base</span>.OnModelCreating(modelBuilder); } }</pre> <style type="text/css"><![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; }]]></style> <p> </p> <p>Nel <em>Global.asax</em> registriamo il nostro <em>DbContext</em>:</p> <pre class="csharpcode">DefaultModel.RegisterContext( <span class="kwrd">new</span> Microsoft.AspNet.DynamicData.ModelProviders.EFDataModelProvider(() =&gt; <span class="kwrd">new</span> Db()), <span class="kwrd">new</span> ContextConfiguration { ScaffoldAllTables = <span class="kwrd">true</span> });</pre> <style type="text/css"><![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; }]]></style> <p> </p> <p>F5, per vedere in azione il nostro <em>Data Site</em>:</p> <p><a href="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/PietroLibroBlog/Windows-Live-Writer/3b52774302cc_7140/image_6.png"><img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="image" src="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/PietroLibroBlog/Windows-Live-Writer/3b52774302cc_7140/image_thumb_2.png" width="244" height="156" /></a></p> <p>Discorso simile per l’utilizzo <em>dell’EntityDataSource</em> control.</p><img src="http://blogs.ugidotnet.org/PietroLibroBlog/aggbug/101806.aspx" width="1" height="1" /> Pietro Libro http://blogs.ugidotnet.org/PietroLibroBlog/archive/2014/03/03/dynamic-data-provider-per-ef6-released.aspx Mon, 03 Mar 2014 10:06:00 GMT http://blogs.ugidotnet.org/PietroLibroBlog/archive/2014/03/03/dynamic-data-provider-per-ef6-released.aspx#feedback http://blogs.ugidotnet.org/PietroLibroBlog/comments/commentRss/101806.aspx http://blogs.ugidotnet.org/PietroLibroBlog/services/trackbacks/101806.aspx EF6 Alpha 1 http://blogs.ugidotnet.org/PietroLibroBlog/archive/2012/11/07/ef6-alpha-1.aspx <p>Per chi se lo fosse perso :-) : <a href=" http://blogs.msdn.com/b/adonet/archive/2012/10/30/ef6-alpha-1-available-on-nuget.aspx" target="_blank">EF6 Alpha 1</a>. Tra le novità più interessanti il supporto <em>Async</em> per “Query and Save”.</p><img src="http://blogs.ugidotnet.org/PietroLibroBlog/aggbug/101315.aspx" width="1" height="1" /> Pietro Libro http://blogs.ugidotnet.org/PietroLibroBlog/archive/2012/11/07/ef6-alpha-1.aspx Wed, 07 Nov 2012 12:24:38 GMT http://blogs.ugidotnet.org/PietroLibroBlog/archive/2012/11/07/ef6-alpha-1.aspx#feedback http://blogs.ugidotnet.org/PietroLibroBlog/comments/commentRss/101315.aspx http://blogs.ugidotnet.org/PietroLibroBlog/services/trackbacks/101315.aspx DomusDotNet: EF Code First Migrations (Parte 1) http://blogs.ugidotnet.org/PietroLibroBlog/archive/2012/04/18/domusdotnet-ef-code-first-migrations-parte-1.aspx <p>Prima parte di un articolo dedicato a Code First Migrations. Articolo completo su <a href="http://www.domusdotnet.org/articoli/ef-code-first-migration-%28parte-1%29.aspx" target="_blank">DomusDotNet</a>.</p><img src="http://blogs.ugidotnet.org/PietroLibroBlog/aggbug/100958.aspx" width="1" height="1" /> Pietro Libro http://blogs.ugidotnet.org/PietroLibroBlog/archive/2012/04/18/domusdotnet-ef-code-first-migrations-parte-1.aspx Wed, 18 Apr 2012 07:53:00 GMT http://blogs.ugidotnet.org/PietroLibroBlog/archive/2012/04/18/domusdotnet-ef-code-first-migrations-parte-1.aspx#feedback http://blogs.ugidotnet.org/PietroLibroBlog/comments/commentRss/100958.aspx http://blogs.ugidotnet.org/PietroLibroBlog/services/trackbacks/100958.aspx EF Power Tools Beta 2: Prove su strada http://blogs.ugidotnet.org/PietroLibroBlog/archive/2012/04/11/ef-power-tools-beta-2-prove-su-strada.aspx <p>Ero troppo curioso di provare la nuova versione (beta) dei Tools per EF. Diciamo che la curiosità è stata parzialmente ripagata <img style="border-bottom-style: none; border-left-style: none; border-top-style: none; border-right-style: none" class="wlEmoticon wlEmoticon-smile" alt="Sorriso" src="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/PietroLibroBlog/Windows-Live-Writer/c2771568168c_12AC0/wlEmoticon-smile_2.png" /> dato che con la prima versione non riuscii  a fare granché essendo, almeno nella mia configurazione software, non molto stabile. Andiamo con ordine: dopo aver installato la nuova versione dei Tools, ho provato subito ad eseguire la funzione “Reverse Engineer Code First”  (disponibile come voce di menu contestuale selezionando un progetto C#).</p> <p><a href="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/PietroLibroBlog/Windows-Live-Writer/c2771568168c_12AC0/image_2.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/PietroLibroBlog/Windows-Live-Writer/c2771568168c_12AC0/image_thumb.png" width="293" height="128" /></a></p> <p>Per l’esperimento ho scelto un database con diverse tabelle, relazioni e “gerarchie”. Dopo aver cliccato sulla voce precedente, VS ha iniziato a “macinare” generando una sfilza di classi, suddividendole opportunatamente in classi di <em>Mapping</em>, <em>Object Model</em> e <em>DbContext</em>:</p> <p><a href="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/PietroLibroBlog/Windows-Live-Writer/c2771568168c_12AC0/image_4.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/PietroLibroBlog/Windows-Live-Writer/c2771568168c_12AC0/image_thumb_1.png" width="179" height="244" /></a></p> <p><a href="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/PietroLibroBlog/Windows-Live-Writer/c2771568168c_12AC0/image_6.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/PietroLibroBlog/Windows-Live-Writer/c2771568168c_12AC0/image_thumb_2.png" width="244" height="205" /></a></p> <p>L’operazione è durata pochi secondi. Secondo il post del team di ADO.NET EF, VS avrebbe dovuto scaricare ed installare (se non già presente nel progetto) l’ultima versione di Entity Framework (nello specifico caso non è accaduto, ma con NuGet, anche questa operazione è durata poco <img style="border-bottom-style: none; border-left-style: none; border-top-style: none; border-right-style: none" class="wlEmoticon wlEmoticon-smile" alt="Sorriso" src="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/PietroLibroBlog/Windows-Live-Writer/c2771568168c_12AC0/wlEmoticon-smile_2.png" /> ). Scorrendo l’elenco delle classi generate noto come il processo di <em>reverse engineering </em>abbia creato delle classi anche per le tutte le viste presenti sul database. Proviamo ad analizzare “graficamente” il modello ad oggetti creato, selezionando nel <em>Solution Explorer </em>la classe derivata dal <em>DbContext</em> e poi la voce “View Entity Data Model (Read Only)”:</p> <p><a href="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/PietroLibroBlog/Windows-Live-Writer/c2771568168c_12AC0/image_8.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/PietroLibroBlog/Windows-Live-Writer/c2771568168c_12AC0/image_thumb_3.png" width="244" height="154" /></a></p> <p><a href="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/PietroLibroBlog/Windows-Live-Writer/c2771568168c_12AC0/image_12.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/PietroLibroBlog/Windows-Live-Writer/c2771568168c_12AC0/image_thumb_5.png" width="244" height="209" /></a></p> <p>Molte delle classi “isolate” sono proprio le classi\viste generate dal VS. Con le altre opzioni disponibili possiamo, creare il DDL SQL:</p> <p><a href="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/PietroLibroBlog/Windows-Live-Writer/c2771568168c_12AC0/image_14.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/PietroLibroBlog/Windows-Live-Writer/c2771568168c_12AC0/image_thumb_6.png" width="244" height="130" /></a></p> <p><a href="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/PietroLibroBlog/Windows-Live-Writer/c2771568168c_12AC0/image_16.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/PietroLibroBlog/Windows-Live-Writer/c2771568168c_12AC0/image_thumb_7.png" width="244" height="241" /></a></p> <p>e visualizzare <em>l’Entity Data Model XML</em>:</p> <p><a href="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/PietroLibroBlog/Windows-Live-Writer/c2771568168c_12AC0/image_18.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/PietroLibroBlog/Windows-Live-Writer/c2771568168c_12AC0/image_thumb_8.png" width="244" height="142" /></a></p> <p><a href="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/PietroLibroBlog/Windows-Live-Writer/c2771568168c_12AC0/image_20.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/PietroLibroBlog/Windows-Live-Writer/c2771568168c_12AC0/image_thumb_9.png" width="244" height="131" /></a></p> <p>Se siamo curiosi, possiamo creare un nuovo database a partire dalle classi generate da VS e poi eseguire uno <em>Schema Compare</em> per visionare le differenze tra l’originale ed il generato:</p> <p><a href="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/PietroLibroBlog/Windows-Live-Writer/c2771568168c_12AC0/image_22.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/PietroLibroBlog/Windows-Live-Writer/c2771568168c_12AC0/image_thumb_10.png" width="244" height="79" /></a></p> <p> </p><p>A colpo d’occhio mancano, rispetto all’originale, Stored Procedure e Viste, poi analizzando nel dettaglio le varie tabelle possiamo trovare alcune differenze come VARCHAR in NVARCHAR, valori di default mancanti, campi TEXT trasformati in NVARCHAR(MAX). Riassumendo, i Tools sembrano essere abbastanza stabili (rispetto alla versione precedente nessun crash <img style="border-bottom-style: none; border-left-style: none; border-top-style: none; border-right-style: none" class="wlEmoticon wlEmoticon-smile" alt="Sorriso" src="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/PietroLibroBlog/Windows-Live-Writer/c2771568168c_12AC0/wlEmoticon-smile_2.png" />) , quello che è certo (almeno fino ad ora) che dovendo partire da un database esistente, sviluppare le classi POCO e <em>DbContext</em> con questa rapidità non ha prezzo, ma sicuramente è necessario un ulteriore lavoro di “fino” (magari in combinazione con EF Code First Migrations) se l’obiettivo è quello di avere un modello finale “fedele” all’originale, in caso contrario è un ottima base di partenza per un <em>refactoring</em>.</p><img src="http://blogs.ugidotnet.org/PietroLibroBlog/aggbug/100945.aspx" width="1" height="1" /> Pietro Libro http://blogs.ugidotnet.org/PietroLibroBlog/archive/2012/04/11/ef-power-tools-beta-2-prove-su-strada.aspx Wed, 11 Apr 2012 07:53:00 GMT http://blogs.ugidotnet.org/PietroLibroBlog/archive/2012/04/11/ef-power-tools-beta-2-prove-su-strada.aspx#feedback http://blogs.ugidotnet.org/PietroLibroBlog/comments/commentRss/100945.aspx http://blogs.ugidotnet.org/PietroLibroBlog/services/trackbacks/100945.aspx DomusDotNet : We Want Web, grazie a tutti :-) http://blogs.ugidotnet.org/PietroLibroBlog/archive/2012/03/10/domusdotnet-wewantweb-grazie-a-tutti.aspx <p>Ieri 9/3/12 si è svolto l’evento WeWantWeb organizzato da DomusDotNet presso la sede Microsoft di Roma. Le sessioni sono state registrare e quanto prima pubblicheremo Slide, codice sorgente degli esempi e Video, sul sito di <a href="http://www.domusdotnet.org/" target="_blank">DomusDotNet</a>. Grazie a tutti i partecipanti!!! Attendiamo i vostri feedback! Al prossimo evento <img style="border-bottom-style: none; border-left-style: none; border-top-style: none; border-right-style: none" class="wlEmoticon wlEmoticon-smile" alt="Sorriso" src="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/PietroLibroBlog/Windows-Live-Writer/7226c6221ecf_11545/wlEmoticon-smile_2.png" />.</p> <p><a href="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/PietroLibroBlog/Windows-Live-Writer/7226c6221ecf_11545/WP_000309_2.jpg"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="Alessandro Mostarda e Massibo Bonanni" border="0" alt="Alessandro Mostarda e Massibo Bonanni" src="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/PietroLibroBlog/Windows-Live-Writer/7226c6221ecf_11545/WP_000309_thumb.jpg" width="184" height="244" /></a><a href="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/PietroLibroBlog/Windows-Live-Writer/7226c6221ecf_11545/WP_000311_2.jpg"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="Giorgio Di Nardo" border="0" alt="Giorgio Di Nardo" src="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/PietroLibroBlog/Windows-Live-Writer/7226c6221ecf_11545/WP_000311_thumb.jpg" width="184" height="244" /></a><a href="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/PietroLibroBlog/Windows-Live-Writer/7226c6221ecf_11545/WP_000317_2.jpg"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="Nicolò Carandini" border="0" alt="Nicolò Carandini" src="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/PietroLibroBlog/Windows-Live-Writer/7226c6221ecf_11545/WP_000317_thumb.jpg" width="184" height="244" /></a><a href="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/PietroLibroBlog/Windows-Live-Writer/7226c6221ecf_11545/WP_000333_2.jpg"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="Pietro Libro" border="0" alt="Pietro Libro" src="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/PietroLibroBlog/Windows-Live-Writer/7226c6221ecf_11545/WP_000333_thumb.jpg" width="184" height="244" /></a><a href="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/PietroLibroBlog/Windows-Live-Writer/7226c6221ecf_11545/WP_000307_2.jpg"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="WP_000307" border="0" alt="WP_000307" src="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/PietroLibroBlog/Windows-Live-Writer/7226c6221ecf_11545/WP_000307_thumb.jpg" width="184" height="244" /></a></p> <p>Da sinistra verso destra: <a href="http://www.alessandromostarda.com/" target="_blank">Alessandro Mostarda</a> e <a href="http://codetailor.blogspot.com/" target="_blank">Massimo Bonanni</a>, Giorgio Di Nardo, <a href="http://blogs.ugidotnet.org/Nick60/Default.aspx" target="_blank">Nick</a>, io <img style="border-bottom-style: none; border-left-style: none; border-top-style: none; border-right-style: none" class="wlEmoticon wlEmoticon-smile" alt="Sorriso" src="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/PietroLibroBlog/Windows-Live-Writer/7226c6221ecf_11545/wlEmoticon-smile_2.png" />, parte di coloro che hanno avuto la pazienza di ascoltarci <img style="border-bottom-style: none; border-left-style: none; border-top-style: none; border-right-style: none" class="wlEmoticon wlEmoticon-smile" alt="Sorriso" src="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/PietroLibroBlog/Windows-Live-Writer/7226c6221ecf_11545/wlEmoticon-smile_2.png" />.</p><img src="http://blogs.ugidotnet.org/PietroLibroBlog/aggbug/100854.aspx" width="1" height="1" /> Pietro Libro http://blogs.ugidotnet.org/PietroLibroBlog/archive/2012/03/10/domusdotnet-wewantweb-grazie-a-tutti.aspx Sat, 10 Mar 2012 20:52:00 GMT http://blogs.ugidotnet.org/PietroLibroBlog/archive/2012/03/10/domusdotnet-wewantweb-grazie-a-tutti.aspx#feedback http://blogs.ugidotnet.org/PietroLibroBlog/comments/commentRss/100854.aspx http://blogs.ugidotnet.org/PietroLibroBlog/services/trackbacks/100854.aspx Virtual Drives http://blogs.ugidotnet.org/PietroLibroBlog/archive/2010/12/02/virtual-drives.aspx <p>Se avete necessità di associare una directory ad un drive virtuale forse questa applicazione può farvi comodo:</p> <p><a title="http://www.ntwind.com/software/utilities/visual-subst.html" href="http://www.ntwind.com/software/utilities/visual-subst.html">http://www.ntwind.com/software/utilities/visual-subst.html</a></p> <p>E’ una “replica” visuale del comando subst </p><img src="http://blogs.ugidotnet.org/PietroLibroBlog/aggbug/99527.aspx" width="1" height="1" /> Pietro Libro http://blogs.ugidotnet.org/PietroLibroBlog/archive/2010/12/02/virtual-drives.aspx Thu, 02 Dec 2010 15:50:00 GMT http://blogs.ugidotnet.org/PietroLibroBlog/archive/2010/12/02/virtual-drives.aspx#feedback http://blogs.ugidotnet.org/PietroLibroBlog/comments/commentRss/99527.aspx http://blogs.ugidotnet.org/PietroLibroBlog/services/trackbacks/99527.aspx Confronto di schemi di database in Visual Studio http://blogs.ugidotnet.org/PietroLibroBlog/archive/2009/12/26/confronto-di-schemi-di-database-in-visual-studio.aspx <p> </p> <p>Da quando ho avuto la fortuna di poter installare Visual Studio Team System, per gestire le modifiche sui database di SQL Server utilizzo il tool integrato “Nuovo confronto schema” raggiungibile dal menu dati di Visual Studio. Il tool si presenta come nello screenshot seguente (in questo caso la “versione italiana”):</p> <p><a href="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/PietroLibroBlog/WindowsLiveWriter/ConfrontodischemididatabaseinVisualStudi_ED64/image_2.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/PietroLibroBlog/WindowsLiveWriter/ConfrontodischemididatabaseinVisualStudi_ED64/image_thumb.png" width="244" height="112" /></a> </p> <p>A questo punto possiamo scegliere i database su cui eseguire il confronto degli schemi e premere “OK”. Secondo della complessità dei database su cui viene eseguito il confronto, la procedura potrebbe impiegare qualche minuto prima di terminare. Completato il processo, verrà visualizzata una schermata in cui viene riepilogato lo stato dei due database: </p> <p><a href="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/PietroLibroBlog/WindowsLiveWriter/ConfrontodischemididatabaseinVisualStudi_ED64/image_4.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/PietroLibroBlog/WindowsLiveWriter/ConfrontodischemididatabaseinVisualStudi_ED64/image_thumb_1.png" width="244" height="129" /></a> </p> <p>Con qualche click del mouse è possibile indicare quali oggetti (tabelle, colonne, utenti…) bisognerà creare, aggiornare o eliminare nei due database. A questo punto è possibile eseguire direttamente l’aggiornamento sul database di destinazione o salvare lo script di aggiornamento su file:</p> <p><a href="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/PietroLibroBlog/WindowsLiveWriter/ConfrontodischemididatabaseinVisualStudi_ED64/image_6.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/PietroLibroBlog/WindowsLiveWriter/ConfrontodischemididatabaseinVisualStudi_ED64/image_thumb_2.png" width="244" height="51" /></a> </p> <p>Avendo installato sulla mia macchina due istanze di SQL Server 2005, una di “Sviluppo” ed una di “Produzione”, dopo ogni release, in caso di modifiche al database, tenere aggiornate le due istanze è veramente semplice. Spesso mi sono trovato ad utilizzare il prodotto “SQL Delta”, ma la comodità di avere tutti gli strumenti integrati in un unico ambiente di sviluppo è un’altra cosa.</p><img src="http://blogs.ugidotnet.org/PietroLibroBlog/aggbug/97766.aspx" width="1" height="1" /> Pietro Libro http://blogs.ugidotnet.org/PietroLibroBlog/archive/2009/12/26/confronto-di-schemi-di-database-in-visual-studio.aspx Sat, 26 Dec 2009 17:47:00 GMT http://blogs.ugidotnet.org/PietroLibroBlog/archive/2009/12/26/confronto-di-schemi-di-database-in-visual-studio.aspx#feedback http://blogs.ugidotnet.org/PietroLibroBlog/comments/commentRss/97766.aspx http://blogs.ugidotnet.org/PietroLibroBlog/services/trackbacks/97766.aspx Backup/Restore SMS http://blogs.ugidotnet.org/PietroLibroBlog/archive/2008/11/29/backuprestore-sms.aspx <p>Avendo acquistato un nuovo Palmare, è sorto il problema di dover trasferire i dati dal vecchio al nuovo dispositivo, tra i quali i messaggi SMS. Ho trovato questa utility, <a href="http://www.pocketpcitalia.com/News/2007/04/SmsImport--backup-e-ripristino/" target="_blank">SmsImport</a> veramente interessante. Oltre ad effettuare il backup ed il riprisinto degli SMS, esporta i dati in un file XML (e questo mi suggerisce la possibilità di creare un'applicazione personalizzata che legge da XML ed importa su un databse SQL Server Mobile) ed in più, seguendo il link indicato è possibile scaricare anche i sorgenti (in VC++). La versione è stata aggiornata dallo sviluppatore che ha progettato il tool, al 9 giugno 2008. L'installazione è veramente molto semplice: è sufficiente copiare il file nel dispositivo ed eseguirlo.</p> <div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:7bca4dba-bd2a-4a4d-9cf6-a223ed5fd086" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px">Technorati Tag: <a href="http://technorati.com/tags/SMS" rel="tag">SMS</a>,<a href="http://technorati.com/tags/Pocket%20PC" rel="tag">Pocket PC</a>,<a href="http://technorati.com/tags/Import" rel="tag">Import</a>,<a href="http://technorati.com/tags/Export" rel="tag">Export</a></div><img src="http://blogs.ugidotnet.org/PietroLibroBlog/aggbug/94798.aspx" width="1" height="1" /> Pietro Libro http://blogs.ugidotnet.org/PietroLibroBlog/archive/2008/11/29/backuprestore-sms.aspx Sat, 29 Nov 2008 14:28:28 GMT http://blogs.ugidotnet.org/PietroLibroBlog/archive/2008/11/29/backuprestore-sms.aspx#feedback http://blogs.ugidotnet.org/PietroLibroBlog/comments/commentRss/94798.aspx http://blogs.ugidotnet.org/PietroLibroBlog/services/trackbacks/94798.aspx