<?xml version="1.0" encoding="iso-8859-15"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xml:lang="it-it"><title>blogs.ASPItalia.com</title><id>http://blogs.aspitalia.com/sm15455/</id><link href="http://blogs.aspitalia.com/sm15455/" rel="self" type="application/rss+xml" /><link rel="alternate" type="text/html" href="http://blogs.aspitalia.com/sm15455/" /><generator uri="http://feed.aspitalia.com/" version="1.0">feed.ASPItalia.com 'Caesar Reborn' 2009.6.29</generator><author><name>blogs.ASPItalia.com</name><uri>http://blogs.aspitalia.com/sm15455/</uri></author><updated>2009-06-09T05:00:00+00:00</updated><icon>http://gui.ASPItalia.com/images/aspitalia/syndication.gif</icon><entry><title>Entity Framework e le performance con la Like</title><id>http://blogs.aspitalia.com/sm15455/post2514/Entity-Framework-Performance-Like.aspx</id><updated>2009-06-09T05:00:00+00:00</updated><content type="text/html">&lt;img src='http://blogs.aspitalia.com/services/counter_rss.aspx?PostID=2514' border=&quot;0&quot; style=&quot;width:1px; height:1px;&quot; /&gt;&lt;p&gt;Nel bel mezzo della notte insonne ho deciso di fare qualche test per verificare quanto il problema mostrato in questo &lt;a href=&quot;http://www.linqitalia.com/script/124/ottimizzare-where-operatore-like-entity-framework.aspx&quot;&gt;script&lt;/a&gt; fosse rilevante. &lt;/p&gt; &lt;p&gt;&amp;#160;&lt;/p&gt; &lt;p&gt;Ho creato una tabella con un solo campo di tipo varchar(50) e l'ho popolata con 500.000 righe. poi ho creato una console application ed ho eseguito la stessa query per 100 volte utizzando prima la sintassi LINQ To Entities e poi quella Entity SQL. &lt;/p&gt; &lt;p&gt;Il risultato &#232; abbastanza impietoso perch&#232; la sintassi LINQ To Entities impiega 1'02''815 mentre quella Entity SQL impiega 1''221. La differenza di 1 minuto su 100 query &#232; enorme. questo fatto &#232; da considerare quando si vogliono fare applicazioni scalabili con Entity Framework.. tenetelo a mente&lt;/p&gt; &lt;p&gt;&amp;#160;&lt;/p&gt; &lt;p&gt;Stay Tuned...&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Tags:&lt;/strong&gt; &lt;a href=&quot;http://tags.aspitalia.com/ADO.NET_Entity_Framework/&quot; rel=&quot;tag&quot;&gt;ADO.NET Entity Framework&lt;/a&gt;, &lt;a href=&quot;http://tags.aspitalia.com/LINQ/&quot; rel=&quot;tag&quot;&gt;LINQ&lt;/a&gt;&lt;/p&gt;&lt;hr /&gt;&lt;p&gt;&lt;a href=&quot;http://www.aspitalia.com/&quot;&gt;(C) 2009 ASPItalia.com Network - All rights reserved&lt;/a&gt;&lt;/p&gt;</content><author><name>Stefano Mostarda</name></author><category term="Entity Framework In Action"/><link rel="alternate" type="text/html" href="http://blogs.aspitalia.com/sm15455/post2514/Entity-Framework-Performance-Like.aspx"/><slash:comments>0</slash:comments><wfw:comment>http://blogs.aspitalia.com/sm15455/post2514/Entity-Framework-Performance-Like.aspx#feedback</wfw:comment><wfw:commentRss>http://blogs.aspitalia.com/SM15455/CommentRSS2514.aspx</wfw:commentRss><trackback:ping>http://blogs.aspitalia.com/services/trackback.aspx?PostID=2514</trackback:ping></entry><entry><title>Entity Framework e la generazione di codice POCO</title><id>http://blogs.aspitalia.com/sm15455/post2512/Entity-Framework-Generazione-Codice.aspx</id><updated>2009-06-02T18:22:55+00:00</updated><content type="text/html">&lt;img src='http://blogs.aspitalia.com/services/counter_rss.aspx?PostID=2512' border=&quot;0&quot; style=&quot;width:1px; height:1px;&quot; /&gt;&lt;p&gt;Una delle cose pi&#249; &lt;strong&gt;S&lt;/strong&gt;gradite di Entity Framework 4.0 &#232; il fatto che il designer non genera classi POCO. Questa scelta &#232; ovvia e rimarr&#224; quella di default anche in RTM per mantenere la compatibilit&#224; col passato. La buona notizia &#232; che per la RTM il team dovrebbe anche includere un template T4 per la generazione di classi POCO.&lt;/p&gt; &lt;p&gt;&amp;#160;&lt;/p&gt; &lt;p&gt;La certezza assoluta &#232; che questo template generer&#224; le classi aggiungendole allo stesso assembly in cui si trova l'EDMX. Ora che finalmente abbiamo un sistema &lt;strong&gt;OTTIMO-FANTASTICO-ECCEZIONALE-MERAVIGLIOSO-PERFETTO&lt;/strong&gt; di generazione del codice, questa limitazione si pu&#242; superare. Cercando un p&#242; in rete e partendo dalla base del template esistente, sono arrivato a creare un template che permette di:&lt;/p&gt; &lt;p&gt;Generare le classi e l'objectcontext in classi separate.&lt;/p&gt; &lt;p&gt;Aggiungere le classi ad un assembly diverso da quello in cui si trova l'edmx. Nell'assembly dell'ObjectModel o del DomainModel ad esempio. (Facoltativo).&lt;/p&gt; &lt;p&gt;Aggiungere l'objectcontext ad un assembly diverso da quello in cui si trova l'edmx. Nell'assembly del DAL ad esempio. (Facoltativo).&lt;/p&gt; &lt;p&gt;Mantenete il proprio codice aggiunto alle entities anche quando l'entit&#224; viene rigenerata.&lt;/p&gt; &lt;p&gt;&amp;#160;&lt;/p&gt; &lt;p&gt;Ovviamente il tutto &#232; molto Beta 1 ma credo sia un ottimo punto di partenza per capire come funziona il T4 e per avere classi POCO da subito. In altri post vedremo come ho risolto alcuni problemi. nel frattempo potete scaricare il template a questo &lt;a href=&quot;http://lab.aspitalia.com/60/template-generare-classi-entity-framework-4.0.aspx&quot; target=&quot;_blank&quot;&gt;indirizzo&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Tags:&lt;/strong&gt; &lt;a href=&quot;http://tags.aspitalia.com/.NET_Framework/&quot; rel=&quot;tag&quot;&gt;.NET Framework&lt;/a&gt;, &lt;a href=&quot;http://tags.aspitalia.com/.NET_Framework_4.0/&quot; rel=&quot;tag&quot;&gt;.NET Framework 4.0&lt;/a&gt;, &lt;a href=&quot;http://tags.aspitalia.com/ADO.NET_Entity_Framework/&quot; rel=&quot;tag&quot;&gt;ADO.NET Entity Framework&lt;/a&gt;, &lt;a href=&quot;http://tags.aspitalia.com/ORM/&quot; rel=&quot;tag&quot;&gt;ORM&lt;/a&gt;&lt;/p&gt;&lt;hr /&gt;&lt;p&gt;&lt;a href=&quot;http://www.aspitalia.com/&quot;&gt;(C) 2009 ASPItalia.com Network - All rights reserved&lt;/a&gt;&lt;/p&gt;</content><author><name>Stefano Mostarda</name></author><category term="Entity Framework In Action"/><link rel="alternate" type="text/html" href="http://blogs.aspitalia.com/sm15455/post2512/Entity-Framework-Generazione-Codice.aspx"/><slash:comments>0</slash:comments><wfw:comment>http://blogs.aspitalia.com/sm15455/post2512/Entity-Framework-Generazione-Codice.aspx#feedback</wfw:comment><wfw:commentRss>http://blogs.aspitalia.com/SM15455/CommentRSS2512.aspx</wfw:commentRss><trackback:ping>http://blogs.aspitalia.com/services/trackback.aspx?PostID=2512</trackback:ping></entry><entry><title>.NET Framework 4.0 Beta 1: Entity Framework</title><id>http://blogs.aspitalia.com/sm15455/post2499/.NET-Framework-4.0-Beta-1-Entity-Framework.aspx</id><updated>2009-05-18T14:14:28+00:00</updated><content type="text/html">&lt;img src='http://blogs.aspitalia.com/services/counter_rss.aspx?PostID=2499' border=&quot;0&quot; style=&quot;width:1px; height:1px;&quot; /&gt;&lt;p&gt;In questi minuti &#232; uscita la beta 1 del .NET Framework 4.0. Ovviamente, per quanto mi riguarda, la cosa pi&#249; interessante &#232; Entity Framework 4.0. Le novit&#224; della nuova versione sono state annunciate gi&#224; da tempo nel blog dedicato e quindi non ci sono cose nuove da scoprire.&lt;/p&gt;  &lt;p&gt;Nonostante questo, credo che sia il caso di fare una carrellata in rigoroso ordine di preferenza personale :)&lt;/p&gt;  &lt;ul&gt; &lt;li&gt;Supporto per mappare le stored procedure su tipi custom: fino ad ora le stored procedure potevano essere mappate solo verso entit&#224; o su tipi custom che per&#242; avessereo un mapping verso una tabella o view nel database. adesso finalente questo on sar&#224; necessario. Baster&#224; creare un ComplexType e mapparci la SP.&lt;/li&gt; &lt;li&gt;Designer decente. Finalmente il designer pu&#242; defnirsi decente. innanzitutto c'&#232; il supporto per i complex types ma soprattutto non ci sono crash ogni volta che si fa qualcosa di un pelino pi&#249; complesso.&lt;/li&gt; &lt;li&gt;Customizzazione del codice generato tramite T4. Finalmente possiamo customizzarce il codice che genera il designer tramite un template. ovviamente possiamo anche suddividere le clasi su pi&#249; file e molto altro ancora.&lt;/li&gt; &lt;li&gt;Persistence Ignorance. Gran bella novit&#224; per carit&#224;.... Ma non sempre mi &#232; servit&#224; come le altre precedenti&lt;/li&gt; &lt;li&gt;Miglior supporto per lo sviluppo n-tier con API che semplificano la vita.&lt;/li&gt; &lt;li&gt;Foreign-key per semplificare la vita quando si inseriscono sul db entit&#224; in relazione tra loro (solo dopo la beta 1)&lt;/li&gt; &lt;li&gt;Possibilit&#224; di generare il database partendo dalle classi (Model first).&lt;/li&gt; &lt;li&gt;Lazy loading&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Ci sono altre piccole feature che scopriremo col tempo, ma direi che ormai &#232; il momento di provarle sul campo :D.&lt;/p&gt; &lt;p&gt;Maggiori informazioni e le informazioni per il download sono disponibili nel nostro mini-sito dedicato al &lt;a href=&quot;http://netfx4.winfxitalia.com/&quot;&gt;.NET Framework 4.0&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;Stay Tuned...&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Tags:&lt;/strong&gt; &lt;a href=&quot;http://tags.aspitalia.com/.NET_Framework_3.5/&quot; rel=&quot;tag&quot;&gt;.NET Framework 3.5&lt;/a&gt;, &lt;a href=&quot;http://tags.aspitalia.com/.NET_Framework_4.0/&quot; rel=&quot;tag&quot;&gt;.NET Framework 4.0&lt;/a&gt;, &lt;a href=&quot;http://tags.aspitalia.com/ADO.NET_Entity_Framework/&quot; rel=&quot;tag&quot;&gt;ADO.NET Entity Framework&lt;/a&gt;, &lt;a href=&quot;http://tags.aspitalia.com/LINQ/&quot; rel=&quot;tag&quot;&gt;LINQ&lt;/a&gt;, &lt;a href=&quot;http://tags.aspitalia.com/ORM/&quot; rel=&quot;tag&quot;&gt;ORM&lt;/a&gt;, &lt;a href=&quot;http://tags.aspitalia.com/.NET_Framework/&quot; rel=&quot;tag&quot;&gt;.NET Framework&lt;/a&gt;&lt;/p&gt;&lt;hr /&gt;&lt;p&gt;&lt;a href=&quot;http://www.aspitalia.com/&quot;&gt;(C) 2009 ASPItalia.com Network - All rights reserved&lt;/a&gt;&lt;/p&gt;</content><author><name>Stefano Mostarda</name></author><category term="Entity Framework In Action"/><link rel="alternate" type="text/html" href="http://blogs.aspitalia.com/sm15455/post2499/.NET-Framework-4.0-Beta-1-Entity-Framework.aspx"/><slash:comments>0</slash:comments><wfw:comment>http://blogs.aspitalia.com/sm15455/post2499/.NET-Framework-4.0-Beta-1-Entity-Framework.aspx#feedback</wfw:comment><wfw:commentRss>http://blogs.aspitalia.com/SM15455/CommentRSS2499.aspx</wfw:commentRss><trackback:ping>http://blogs.aspitalia.com/services/trackback.aspx?PostID=2499</trackback:ping></entry><entry><title>Windows Comunication Foundation al Basta! On Tour di Milano</title><id>http://blogs.aspitalia.com/sm15455/post2493/Windows-Comunication-Foundation-Basta-ON-Tour-Milano.aspx</id><updated>2009-05-07T09:08:23+00:00</updated><content type="text/html">&lt;img src='http://blogs.aspitalia.com/services/counter_rss.aspx?PostID=2493' border=&quot;0&quot; style=&quot;width:1px; height:1px;&quot; /&gt;&lt;p&gt;Come gi&#224; ampiamente annunciato, Gioved&#236; 28 e Venerd&#236; 29 Maggio a Milano ci&amp;#160; sar&#224; il Basta! On Tour. A Differena dell'edizione di Marzo a Roma, questa volta non si terranno sessioni singole ma sar&#224; una due giorni dedicata solamente a workshop che permettono cos&#236; di dedicarsi interamente ad un argomento garantendo cos&#236; molti approfondimenti che spesso in una sessione singola non sono possibili. Personalmente devo dire che questo tipo di organizzazione mi piace molto :D.&lt;/p&gt; &lt;p&gt;&amp;#160;&lt;/p&gt; &lt;p&gt;Per quanto mi riguarda, terr&#242; una track su WCF dove parler&#242; di svariati argomenti come la sicurezza, la tracciabilit&#224; delle chiamate, l'estendibilit&#224; ed altro ancora quindi preparatevi perch&#232; l'agenda &#232; parecchio succulenta ;).&lt;/p&gt; &lt;p&gt;&amp;#160;&lt;/p&gt; &lt;p&gt;Visto che la modalit&#224; dell'evento mi piace parecchio, direi che l'iscrizione &#232; un MUST. Visto che non ci facciamo mai mancare occasioni, vi ricordo che gli iscritti alla community hanno uno sconto del 15% (utilizzando il promotion code &quot;aspitalia&quot;) e che comunque fino al 15 Maggio la tariffa &#232; ridotta del 15%, quindi...... non avete scuse per non esserci.&lt;/p&gt; &lt;p&gt;&amp;#160;&lt;/p&gt; &lt;p&gt;Stay Tuned...&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Tags:&lt;/strong&gt; &lt;a href=&quot;http://tags.aspitalia.com/.NET_Framework_3.0/&quot; rel=&quot;tag&quot;&gt;.NET Framework 3.0&lt;/a&gt;, &lt;a href=&quot;http://tags.aspitalia.com/Windows_Communication_Foundation/&quot; rel=&quot;tag&quot;&gt;Windows Communication Foundation&lt;/a&gt;&lt;/p&gt;&lt;hr /&gt;&lt;p&gt;&lt;a href=&quot;http://www.aspitalia.com/&quot;&gt;(C) 2009 ASPItalia.com Network - All rights reserved&lt;/a&gt;&lt;/p&gt;</content><author><name>Stefano Mostarda</name></author><category term="Eventi"/><link rel="alternate" type="text/html" href="http://blogs.aspitalia.com/sm15455/post2493/Windows-Comunication-Foundation-Basta-ON-Tour-Milano.aspx"/><slash:comments>0</slash:comments><wfw:comment>http://blogs.aspitalia.com/sm15455/post2493/Windows-Comunication-Foundation-Basta-ON-Tour-Milano.aspx#feedback</wfw:comment><wfw:commentRss>http://blogs.aspitalia.com/SM15455/CommentRSS2493.aspx</wfw:commentRss><trackback:ping>http://blogs.aspitalia.com/services/trackback.aspx?PostID=2493</trackback:ping></entry><entry><title>Virtual Earth &amp;#232; finalmente dotato di una ricerca decente</title><id>http://blogs.aspitalia.com/sm15455/post2481/Virtual-Earth-Finalmente-Dotato-Ricerca-Decente.aspx</id><updated>2009-04-11T00:54:44+00:00</updated><content type="text/html">&lt;img src='http://blogs.aspitalia.com/services/counter_rss.aspx?PostID=2481' border=&quot;0&quot; style=&quot;width:1px; height:1px;&quot; /&gt;&lt;p&gt;Tempo fa scrissi un articolo su Virtual Earth dicendo che la ricerca era il vero tallone d'achille di questa tecnologia. Non ho mai lavorato in maniera diretta con google maps, ma virtual earth mi sebrava davvero ben fatto con api semplici e ottime potenzialit&#224;. Tuttavia, il fatto che per trovare casa mia bisognasse inserire l'indirizzo, il cap la citt&#224; e lo stato mi sembrava un'ottima causa per spingere l'adozione ai minimi storici.&lt;/p&gt; &lt;p&gt;&amp;#160;&lt;/p&gt; &lt;p&gt;Leggo oggi che Microsoft ha rilasciato una nuova versione di Virtual Earth ed un aggiornamento del controllo. la maggior parte delle novit&#224; sono interne e non visibili agli sviluppatori, ma il fatto che ora la ricerca sembra trovare tutto senza problemi o necessit&#224; di inserire tutti i dati di un indirizzo mi fa ben sperare. Ripeto, non ho lavorato direttamente con google maps, ma se dopo altre prove mi convinco che la ricerca &#232; efficiente, probabilmente comincier&#242; a considerare Virtual Earth un prodotto molto pi&#249; serio.&lt;/p&gt; &lt;p&gt;&amp;#160;&lt;/p&gt; &lt;p&gt;Stay Tuned...&lt;/p&gt;&lt;hr /&gt;&lt;p&gt;&lt;a href=&quot;http://www.aspitalia.com/&quot;&gt;(C) 2009 ASPItalia.com Network - All rights reserved&lt;/a&gt;&lt;/p&gt;</content><author><name>Stefano Mostarda</name></author><category term="ASP.NET"/><link rel="alternate" type="text/html" href="http://blogs.aspitalia.com/sm15455/post2481/Virtual-Earth-Finalmente-Dotato-Ricerca-Decente.aspx"/><slash:comments>0</slash:comments><wfw:comment>http://blogs.aspitalia.com/sm15455/post2481/Virtual-Earth-Finalmente-Dotato-Ricerca-Decente.aspx#feedback</wfw:comment><wfw:commentRss>http://blogs.aspitalia.com/SM15455/CommentRSS2481.aspx</wfw:commentRss><trackback:ping>http://blogs.aspitalia.com/services/trackback.aspx?PostID=2481</trackback:ping></entry><entry><title>Prime impressioni su ASP.NET MVC</title><id>http://blogs.aspitalia.com/sm15455/post2473/Prime-Impressioni-ASP.NET-MVC.aspx</id><updated>2009-03-21T11:39:52+00:00</updated><content type="text/html">&lt;img src='http://blogs.aspitalia.com/services/counter_rss.aspx?PostID=2473' border=&quot;0&quot; style=&quot;width:1px; height:1px;&quot; /&gt;&lt;p&gt;Sto lavorando ormai da un paio di mesi su ASP.NET MVC. Premetto che sulla parte architetturale del pattern non ne sapevo niente quindi il mio primo approccio &#232; stato puramente pratico. Dopo la prima fase di totale nausea e scomodit&#224; ho cominciato comunque ad apprezzare questo modo di sviluppare applicazioni web. I punti che mi interessa sottolineare sono:&lt;/p&gt; &lt;p&gt;&amp;#160;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Produttivit&#224;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;Sviluppare applicazioni sfruttando le webform &#232; molto pi&#249; semplice e veloce. Il fatto di avere a disposizione gli eventi &#232; molto comodo cos&#236; come un ciclo di vita molto pi&#249; articolato che ci permette di infilarci ovunque. Tuttavia, non &#232; vero come ho sentito dire che una pagina sviluppata con MVC richiede oltre il doppio del tempo. Certo quando l'interazione &#232; particolarmente complessa probabilmente si deve lavorare parecchio, ma grazie ad ajax e jQuery il tutto diventa molto pi&#249; semplice e a volte anche pi&#249; pulito rispetto alle webform (vedi updatepanel). Ora che ho una certa dimestichezza posso dire che una funzionalit&#224; con un'interazione mediamente complessa sviluppata con MVC richiede circa il 15% in pi&#249; del tempo. Certo &#232; sempre pi&#249; tempo, ma se ci si mettono i benefici che si traggono dall'utilizzo di MVC, &#232; un tempo accettabile.&lt;/p&gt; &lt;p&gt;&amp;#160;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Performance&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;Non ho in mano numeri reali, ma la differenza si vede ad occhio nudo. Eliminando viewstate, ciclo di vita e altre menate varie delle webforms, ASP.NET MVC vince 6-0 6-3 6-2 in 60 minuti e senza possibilit&#224; di replica.&lt;/p&gt; &lt;p&gt;&amp;#160;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Curva di apprendimento&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;Questo &#232; il grosso neo. Non dico che ASP.NET MVC sia cos&#236; complesso, ma in generale il cambio di paradigma di sviluppo rende il passaggio pi&#249; complesso poich&#232; per certi versi &#232; completamente agli antipodi rispetto alle webforms. Questo in un team composto prettamente da figure junior richiede almeno 3/4 di settimane di studio e test. Rispetto a quanto ci vuole per passare da classic ASP ad ASP.NET webforms la curva &#232; molto pi&#249; complessa. &lt;/p&gt; &lt;p&gt;&amp;#160;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Eleganza&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;A chi dice che il codice con ASP.NET MVC sia pi&#249; elegante io rispondo dicendo che non &#232; assolutamente vero. Le porcate si possono fare tanto in MVC quando con le webforms e con la stessa facilit&#224;. La realt&#224; &#232; che MVC offre una grande opportunit&#224; per separare bene il codice dall'interfaccia e renderlo testabile, ma laddove la testabilit&#224; non interessa (e parliamoci chiaro LA VERA TESTABILITA' INTERESSA SOLO UNA PICCOLA PARTE DEI SITI CHE SI SVILUPPANO NEL MONDO) con webforms possiamo ugualmente scrivere dei siti eleganti facilmente manutenibili e con un'ottimo grado di separazione del codice. Sfruttando a dovere usercontrol e custom control, le pagine risultano anche pi&#249; leggibili delle view di mvc ed il codice &#232; ugualmente ben organizzato. Certo non &#232; testabile via tool, ma nella maggior parte dei casi.. chissene.&lt;/p&gt; &lt;p&gt;&amp;#160;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Finale&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;Dovete fare un sito e siete indecisi se utilizzare ASP.NET MVC o le webforms? La prima discriminante &#232; la testabilit&#224;. Se questa &#232; obbligatoria, allora MVC &#232; la sola scelta, se la risposta &#232; no, webforms parte favorito. La seconda discriminante &#232; la quantit&#224; di interazione tra la pagina e l'utente. Se questa &#232; molto complessa (diversi roundtrip al server, modifiche pesanti dell'html, etc etc) webforms &#232; la via pi&#249; semplice. Se invece si fa prettamente visualizzazione di dati e navigazione, ASP.NET MVC costituisce una valida alternativa.&lt;/p&gt; &lt;p&gt;&amp;#160;&lt;/p&gt; &lt;p&gt;My 2 cents ...&amp;#160;&amp;#160; Stay tuned ...&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Tags:&lt;/strong&gt; &lt;a href=&quot;http://tags.aspitalia.com/ASP.NET/&quot; rel=&quot;tag&quot;&gt;ASP.NET&lt;/a&gt;, &lt;a href=&quot;http://tags.aspitalia.com/ASP.NET_3.5/&quot; rel=&quot;tag&quot;&gt;ASP.NET 3.5&lt;/a&gt;, &lt;a href=&quot;http://tags.aspitalia.com/ASP.NET_MVC/&quot; rel=&quot;tag&quot;&gt;ASP.NET MVC&lt;/a&gt;, &lt;a href=&quot;http://tags.aspitalia.com/Pattern/&quot; rel=&quot;tag&quot;&gt;Pattern&lt;/a&gt;&lt;/p&gt;&lt;hr /&gt;&lt;p&gt;&lt;a href=&quot;http://www.aspitalia.com/&quot;&gt;(C) 2009 ASPItalia.com Network - All rights reserved&lt;/a&gt;&lt;/p&gt;</content><author><name>Stefano Mostarda</name></author><category term="ASP.NET"/><link rel="alternate" type="text/html" href="http://blogs.aspitalia.com/sm15455/post2473/Prime-Impressioni-ASP.NET-MVC.aspx"/><slash:comments>2</slash:comments><wfw:comment>http://blogs.aspitalia.com/sm15455/post2473/Prime-Impressioni-ASP.NET-MVC.aspx#feedback</wfw:comment><wfw:commentRss>http://blogs.aspitalia.com/SM15455/CommentRSS2473.aspx</wfw:commentRss><trackback:ping>http://blogs.aspitalia.com/services/trackback.aspx?PostID=2473</trackback:ping></entry><entry><title>Entity Framework in action &amp;#232; in disponibile in MEAP</title><id>http://blogs.aspitalia.com/sm15455/post2460/Entity-Framework-Action-Disponibile-MEAP.aspx</id><updated>2009-02-16T00:19:02+00:00</updated><content type="text/html">&lt;img src='http://blogs.aspitalia.com/services/counter_rss.aspx?PostID=2460' border=&quot;0&quot; style=&quot;width:1px; height:1px;&quot; /&gt;&lt;p&gt;Da gioved&#236; scorso il mio libro Entity Framework in action &#232; ufficialmente disponibile in &lt;a href=&quot;http://www.manning.com/mostarda/&quot; target=&quot;_blank&quot;&gt;MEAP&lt;/a&gt; dal sito Manning.&lt;/p&gt; &lt;p&gt;Per ora sono disponibili i capitoli di introduzione, quello sul querying e quello sul mapping pi&#249; una appendice dedicata a LINQ in generale ma molto presto ne vedrete anche altri.&lt;/p&gt; &lt;p&gt;E' inutile dire che la mia soddisfazione &#232; immensa. Il libro &#232; ancora ben lontano dall'essere perfetto ma mi piace come sta venendo su . speriamo piaccia anche a voi :D.&lt;/p&gt; &lt;p&gt;&amp;#160;&lt;/p&gt; &lt;p&gt;Stay tuned.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Tags:&lt;/strong&gt; &lt;a href=&quot;http://tags.aspitalia.com/.NET_Framework_3.5/&quot; rel=&quot;tag&quot;&gt;.NET Framework 3.5&lt;/a&gt;, &lt;a href=&quot;http://tags.aspitalia.com/ADO.NET_Entity_Framework/&quot; rel=&quot;tag&quot;&gt;ADO.NET Entity Framework&lt;/a&gt;, &lt;a href=&quot;http://tags.aspitalia.com/LINQ/&quot; rel=&quot;tag&quot;&gt;LINQ&lt;/a&gt;, &lt;a href=&quot;http://tags.aspitalia.com/ORM/&quot; rel=&quot;tag&quot;&gt;ORM&lt;/a&gt;&lt;/p&gt;&lt;hr /&gt;&lt;p&gt;&lt;a href=&quot;http://www.aspitalia.com/&quot;&gt;(C) 2009 ASPItalia.com Network - All rights reserved&lt;/a&gt;&lt;/p&gt;</content><author><name>Stefano Mostarda</name></author><category term="Entity Framework In Action"/><link rel="alternate" type="text/html" href="http://blogs.aspitalia.com/sm15455/post2460/Entity-Framework-Action-Disponibile-MEAP.aspx"/><slash:comments>2</slash:comments><wfw:comment>http://blogs.aspitalia.com/sm15455/post2460/Entity-Framework-Action-Disponibile-MEAP.aspx#feedback</wfw:comment><wfw:commentRss>http://blogs.aspitalia.com/SM15455/CommentRSS2460.aspx</wfw:commentRss><trackback:ping>http://blogs.aspitalia.com/services/trackback.aspx?PostID=2460</trackback:ping></entry><entry><title>Entity Framework e l'EDM</title><id>http://blogs.aspitalia.com/sm15455/post2457/Entity-Framework-EDM.aspx</id><updated>2009-01-31T23:44:49+00:00</updated><content type="text/html">&lt;img src='http://blogs.aspitalia.com/services/counter_rss.aspx?PostID=2457' border=&quot;0&quot; style=&quot;width:1px; height:1px;&quot; /&gt;&lt;p&gt;Penso che nessuno possa mettere in dubbio che il file di mapping sia una delle cose pi&#249; complesse di Entity Framework. Microsoft ha prodotto un editor per semplificarne l'uso proprio perch&#232; spesso, la differenze tra uno e l'altro ORM non &#232; la potenza, ma la velocit&#224; di startup. In questo Entity Framework non ha quasi rivali, pochi click ed il dominio &#232; generato con tanto di mapping verso il database.&lt;/p&gt; &lt;p&gt;Tuttavia, l'editor nella versione attuale &#232; monco. Non supporta Complex Types (ok non moriremo per questo, per&#242;...), non supporta le DefiningQuery, sovrascrive ogni modifica fatta a mano nello storage layer (ogni tanto mi capita di metterci della roba che mi serve e doverla rimettere ad ogni aggiornamento mi rode), Non supporta il mapping di stored procedure polimorfiche, non supporta le QueryView. Insomma, ci sono diverse cose che qualunque progetto un tantinello pi&#249; avanzato richiede e che il designer non supporta. Attenzione per&#242;, per quanto riguarda i complex types, se li si introduce a mano il designer smette di funzionare, mentre negli altri casi continua a funzionare tranquillamente.&lt;/p&gt; &lt;p&gt;Queste lacune mi hanno fatto pensare ancora una volta di pi&#249; che conoscere il mapping &#232; fondamentale. Personalmente ritengo le DefiningQuery una delle feature pi&#249; interessanti perch&#232; permettono di creare delle view direttamente nel modello. Queste view sono interrogabili filtrabili etc etc e spesso risolvono tutti quei problemi di mapping che non sono gestibili in maniera nativa. Non emergendo nel designer, quanti le conoscono? Quanti le hanno mai usate? Nella mia esperienza in alcune aziende la risposta &#232;: zero. &lt;/p&gt; &lt;p&gt;Mi riprometto di parlare di pi&#249; di questa interessante feature di EF. Nel frattemo ribadisco quello che ho detto ad una persona tempo fa: non dire che una cosa non la puoi mappare se prima non sei passato per le DefiningQuery.&lt;/p&gt; &lt;p&gt;&amp;#160;&lt;/p&gt; &lt;p&gt;Stay Tuned...&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Tags:&lt;/strong&gt; &lt;a href=&quot;http://tags.aspitalia.com/.NET_Framework_3.5/&quot; rel=&quot;tag&quot;&gt;.NET Framework 3.5&lt;/a&gt;, &lt;a href=&quot;http://tags.aspitalia.com/ADO.NET_Entity_Framework/&quot; rel=&quot;tag&quot;&gt;ADO.NET Entity Framework&lt;/a&gt;, &lt;a href=&quot;http://tags.aspitalia.com/LINQ/&quot; rel=&quot;tag&quot;&gt;LINQ&lt;/a&gt;, &lt;a href=&quot;http://tags.aspitalia.com/ORM/&quot; rel=&quot;tag&quot;&gt;ORM&lt;/a&gt;&lt;/p&gt;&lt;hr /&gt;&lt;p&gt;&lt;a href=&quot;http://www.aspitalia.com/&quot;&gt;(C) 2009 ASPItalia.com Network - All rights reserved&lt;/a&gt;&lt;/p&gt;</content><author><name>Stefano Mostarda</name></author><category term="Entity Framework In Action"/><link rel="alternate" type="text/html" href="http://blogs.aspitalia.com/sm15455/post2457/Entity-Framework-EDM.aspx"/><slash:comments>2</slash:comments><wfw:comment>http://blogs.aspitalia.com/sm15455/post2457/Entity-Framework-EDM.aspx#feedback</wfw:comment><wfw:commentRss>http://blogs.aspitalia.com/SM15455/CommentRSS2457.aspx</wfw:commentRss><trackback:ping>http://blogs.aspitalia.com/services/trackback.aspx?PostID=2457</trackback:ping></entry><entry><title>Entity Framework e le Navigation Properties</title><id>http://blogs.aspitalia.com/sm15455/post2446/Entity-Framework-Navigation-Properties.aspx</id><updated>2008-12-27T23:12:26+00:00</updated><content type="text/html">&lt;img src='http://blogs.aspitalia.com/services/counter_rss.aspx?PostID=2446' border=&quot;0&quot; style=&quot;width:1px; height:1px;&quot; /&gt;&lt;p&gt;Una relazione &#232; per sua natura bidirezionale. Quello che non &#232; sempre bidirezionale &#232; la sua rappresentazione nel domain model. Prendiamo ad esempio la relazione tra clienti e ordini. Avere a disposizione il cliente di un ordine ha senso, ma ha senso avere a disposizione la lista degli ordini di un cliente? la risposta esatta come sempre &#232;.... dipende. Ora non voglio disquisire sulla validit&#224; o meno della relazione ma su come Entity Framework affronta il problema.&lt;/p&gt; &lt;p&gt;Per default, il wizard si accorge della relazione tra le tabelle e genera un domain model dove le relazioni tra le classi sono bidirezionali, quindi un ordine ha la relazione verso il cliente e il cliente ha una relazione verso gli ordini. Supponiamo che non ci sia utile in alcun modo la relazione tra cliente e ordine. La logica vuole che questa sia eliminata. Il primo problema &#232; che il designer non lo permette; bisogna andare a mano nel codice ed eliminare la propriet&#224; Ordini dalla classe Cliente e nel conceptual model del file di mapping eliminare il riferimento alla propriet&#224; cancellata ed il gioco &#232; fatto. Il secondo problema risale a LINQ to Entities. Abbiamo bisogno della propriet&#224; Ordini per fare le nostre query? In tutti i progetti che ho seguito la risposta &#232; stata no. Grazie al fatto che comunque l'ordine mantiene la propriet&#224; Cliente si riesce a risalire a qualunque dato di cui si ha bisogno. L'unico vero problema sono le query generate a run-time. La regola numero uno &#232; che bisogna sempre vedere le query generate per evitare problemi.&lt;/p&gt; &lt;p&gt;Comunque per ora la mia linea guida &#232; quella di non creare propriet&#224; inutili che complicano solo la vita.&lt;/p&gt; &lt;p&gt;&amp;#160;&lt;/p&gt; &lt;p&gt;Stay tuned...&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Tags:&lt;/strong&gt; &lt;a href=&quot;http://tags.aspitalia.com/.NET_Framework/&quot; rel=&quot;tag&quot;&gt;.NET Framework&lt;/a&gt;, &lt;a href=&quot;http://tags.aspitalia.com/.NET_Framework_3.5/&quot; rel=&quot;tag&quot;&gt;.NET Framework 3.5&lt;/a&gt;, &lt;a href=&quot;http://tags.aspitalia.com/ADO.NET_Entity_Framework/&quot; rel=&quot;tag&quot;&gt;ADO.NET Entity Framework&lt;/a&gt;, &lt;a href=&quot;http://tags.aspitalia.com/LINQ/&quot; rel=&quot;tag&quot;&gt;LINQ&lt;/a&gt;, &lt;a href=&quot;http://tags.aspitalia.com/ORM/&quot; rel=&quot;tag&quot;&gt;ORM&lt;/a&gt;&lt;/p&gt;&lt;hr /&gt;&lt;p&gt;&lt;a href=&quot;http://www.aspitalia.com/&quot;&gt;(C) 2009 ASPItalia.com Network - All rights reserved&lt;/a&gt;&lt;/p&gt;</content><author><name>Stefano Mostarda</name></author><category term="Entity Framework In Action"/><link rel="alternate" type="text/html" href="http://blogs.aspitalia.com/sm15455/post2446/Entity-Framework-Navigation-Properties.aspx"/><slash:comments>0</slash:comments><wfw:comment>http://blogs.aspitalia.com/sm15455/post2446/Entity-Framework-Navigation-Properties.aspx#feedback</wfw:comment><wfw:commentRss>http://blogs.aspitalia.com/SM15455/CommentRSS2446.aspx</wfw:commentRss><trackback:ping>http://blogs.aspitalia.com/services/trackback.aspx?PostID=2446</trackback:ping></entry><entry><title>Dubbio amletico sul codice SQL di Entity Framework con il Table per Hierarchy</title><id>http://blogs.aspitalia.com/sm15455/post2441/Dubbio-Amletico-Codice-SQL-Entity-Framework-Table-Hierarchy.aspx</id><updated>2008-12-09T00:14:02+00:00</updated><content type="text/html">&lt;img src='http://blogs.aspitalia.com/services/counter_rss.aspx?PostID=2441' border=&quot;0&quot; style=&quot;width:1px; height:1px;&quot; /&gt;&lt;p&gt;Stavo facendo un p&#242; di prove per smanettare con la gestione del Table per Hierarchy in Entity Framework. Innanzitutto dopo un impatto iniziale alquanto dramamtico, devo dire che il designer visuale mi ha aiutato non poco a disegnare la struttura partendo dalla classe autogenerata dal database. Visto che il designer &#232; forse la cosa uscita peggio da Entity Framework, tutto sommato direi che questa &#232; una buona cosa.&lt;/p&gt; &lt;p&gt;Dopo aver mappato tutto come si deve, ho eseguito una semplice query per trovare tutti gli oggetti: ctx.Company().ToList();&lt;/p&gt; &lt;p&gt;Quello che mi ha sorpreso &#232; vedere che il generatore di codice di Entity Framework ha generato questo SQL:&lt;/p&gt; &lt;p&gt;SELECT &lt;br /&gt;[Extent1].[Type] AS [Type], &lt;br /&gt;[Extent1].[CompanyId] AS [CompanyId], &lt;br /&gt;[Extent1].[Name] AS [Name], &lt;br /&gt;[Extent1].[BillingAddress] AS [BillingAddress], &lt;br /&gt;[Extent1].[BillingCity] AS [BillingCity], &lt;br /&gt;[Extent1].[BillingZipCode] AS [BillingZipCode], &lt;br /&gt;[Extent1].[BillingCountry] AS [BillingCountry], &lt;br /&gt;[Extent1].[ShippingAddress] AS [ShippingAddress], &lt;br /&gt;[Extent1].[ShippingCity] AS [ShippingCity], &lt;br /&gt;[Extent1].[ShippingZipCode] AS [ShippingZipCode], &lt;br /&gt;[Extent1].[ShippingCountry] AS [ShippingCountry], &lt;br /&gt;[Extent1].[WSUserName] AS [WSUserName], &lt;br /&gt;[Extent1].[WSPassword] AS [WSPassword], &lt;br /&gt;[Extent1].[WSEnabled] AS [WSEnabled] &lt;br /&gt;FROM [dbo].[Company] AS [Extent1] &lt;br /&gt;WHERE ([Extent1].[Type] = 'C') OR ([Extent1].[Type] = 'S')&lt;/p&gt; &lt;p&gt;Ora, type &#232; la colonna che mi fa da discriminatore tra i vari tipi che la tabella contiene, ma visto che tanto sto chiedendo tutti i tipi, &#232; necessaria quella OR? Non capisco se sta li per sicurezza cos&#236; che se ci sono altri record con un type diverso questi vengono ignorati, oppure sta li per errore.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Stay tuned...&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Tags:&lt;/strong&gt; &lt;a href=&quot;http://tags.aspitalia.com/.NET_Framework_3.5/&quot; rel=&quot;tag&quot;&gt;.NET Framework 3.5&lt;/a&gt;, &lt;a href=&quot;http://tags.aspitalia.com/ADO.NET_Entity_Framework/&quot; rel=&quot;tag&quot;&gt;ADO.NET Entity Framework&lt;/a&gt;, &lt;a href=&quot;http://tags.aspitalia.com/LINQ/&quot; rel=&quot;tag&quot;&gt;LINQ&lt;/a&gt;, &lt;a href=&quot;http://tags.aspitalia.com/ORM/&quot; rel=&quot;tag&quot;&gt;ORM&lt;/a&gt;&lt;/p&gt;&lt;hr /&gt;&lt;p&gt;&lt;a href=&quot;http://www.aspitalia.com/&quot;&gt;(C) 2009 ASPItalia.com Network - All rights reserved&lt;/a&gt;&lt;/p&gt;</content><author><name>Stefano Mostarda</name></author><category term="Entity Framework In Action"/><link rel="alternate" type="text/html" href="http://blogs.aspitalia.com/sm15455/post2441/Dubbio-Amletico-Codice-SQL-Entity-Framework-Table-Hierarchy.aspx"/><slash:comments>3</slash:comments><wfw:comment>http://blogs.aspitalia.com/sm15455/post2441/Dubbio-Amletico-Codice-SQL-Entity-Framework-Table-Hierarchy.aspx#feedback</wfw:comment><wfw:commentRss>http://blogs.aspitalia.com/SM15455/CommentRSS2441.aspx</wfw:commentRss><trackback:ping>http://blogs.aspitalia.com/services/trackback.aspx?PostID=2441</trackback:ping></entry><entry><title>Entity Framework e le cancellazioni a cascata</title><id>http://blogs.aspitalia.com/sm15455/post2435/Entity-Framework-Cancellazioni-Cascata.aspx</id><updated>2008-11-28T01:36:35+00:00</updated><content type="text/html">&lt;img src='http://blogs.aspitalia.com/services/counter_rss.aspx?PostID=2435' border=&quot;0&quot; style=&quot;width:1px; height:1px;&quot; /&gt;&lt;p&gt;Sono masochista oltre ogni limite: utilizzo Entity Framework e non uso il designer. Non &#232; un problema di funzionamento del tool, &#232; che ormai la struttura degli XML, seppur difficile all'inizio, mi &#232; chiara e poi sono sempre i soliti 4 nodi che devo usare e grazie all'intellisense in Visual Studio &#232; anche piuttosto facile.&lt;/p&gt; &lt;p&gt;Stasera per fare una prova ho voluto usare il tool visuale. Dopo aver creato la classica situazione ordini-dettagli, mi accorgo che se cancello un'ordine senza aver caricato i dettagli la cancellazione scoppia. Subito penso ad un problema di foreign key sul db, ed infatti il problema risiedeva li. tutto bello aggiorno il modello e noto che nella sezione del ssdl la delete cascade &#232; fedelmente riportata. &lt;/p&gt; &lt;p&gt;Riprovo e ricevo ancora errore e qui comincio ad interrogarmi perch&#232; non capisco il problema. Alla fine scopro che pur aggiornando il modello, nel ssdl la delete-cascad veniva corretaente riportata, menre nel csdl no, lasciando un bel buco aperto. La soluzione per me &#232; stata semplice perch&#232; ho cancellato il file edmx e l'ho ricreato; per quelli che non possono permettersi di fare una cosa del genere, ricordatevi di aggiornare a mano il csdl.&lt;/p&gt; &lt;p&gt;&lt;code&gt;&lt;/p&gt; &lt;p&gt;&amp;lt;Association Name=&amp;quot;FK_OrderDetail_Order&amp;quot;&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;End Role=&amp;quot;Order&amp;quot; Type=&amp;quot;EFInactionOrdersModel.Store.Order&amp;quot; Multiplicity=&amp;quot;1&amp;quot;&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;OnDelete Action=&amp;quot;Cascade&amp;quot; /&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/End&amp;gt; &lt;/p&gt; &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ...&lt;/p&gt; &lt;p&gt;&amp;lt;/Association&amp;gt;&lt;/p&gt; &lt;p&gt;&lt;/code&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Stay Tuned...&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Tags:&lt;/strong&gt; &lt;a href=&quot;http://tags.aspitalia.com/.NET_Framework_3.5/&quot; rel=&quot;tag&quot;&gt;.NET Framework 3.5&lt;/a&gt;, &lt;a href=&quot;http://tags.aspitalia.com/ADO.NET_Entity_Framework/&quot; rel=&quot;tag&quot;&gt;ADO.NET Entity Framework&lt;/a&gt;, &lt;a href=&quot;http://tags.aspitalia.com/LINQ/&quot; rel=&quot;tag&quot;&gt;LINQ&lt;/a&gt;, &lt;a href=&quot;http://tags.aspitalia.com/XML/&quot; rel=&quot;tag&quot;&gt;XML&lt;/a&gt;&lt;/p&gt;&lt;hr /&gt;&lt;p&gt;&lt;a href=&quot;http://www.aspitalia.com/&quot;&gt;(C) 2009 ASPItalia.com Network - All rights reserved&lt;/a&gt;&lt;/p&gt;</content><author><name>Stefano Mostarda</name></author><category term=".NET"/><link rel="alternate" type="text/html" href="http://blogs.aspitalia.com/sm15455/post2435/Entity-Framework-Cancellazioni-Cascata.aspx"/><slash:comments>0</slash:comments><wfw:comment>http://blogs.aspitalia.com/sm15455/post2435/Entity-Framework-Cancellazioni-Cascata.aspx#feedback</wfw:comment><wfw:commentRss>http://blogs.aspitalia.com/SM15455/CommentRSS2435.aspx</wfw:commentRss><trackback:ping>http://blogs.aspitalia.com/services/trackback.aspx?PostID=2435</trackback:ping></entry><entry><title>Entity Framework vNext</title><id>http://blogs.aspitalia.com/sm15455/post2425/Entity-Framework-VNext.aspx</id><updated>2008-10-29T16:16:33+00:00</updated><content type="text/html">&lt;img src='http://blogs.aspitalia.com/services/counter_rss.aspx?PostID=2425' border=&quot;0&quot; style=&quot;width:1px; height:1px;&quot; /&gt;&lt;p&gt;Ieri pomerggio l'ulimo slot &#232; stato dedicato a Entity Frameork vNext. Devo dire che le novit&#224; sembrano molto interessanti. A parte il supporto per la Persistence Ignorance che era una cosa nota, ci sono altre caratteristiche che saltano agli occhi.&lt;/p&gt; &lt;p&gt;La prima &#232; il supporto di un modello di sviluppo EDM-free. praticamente si generano le classi POCO. poi nell'objectcontext si mappano le classi al database attraverso degli attributi e i file di mapping di EF vengono generati a run-time. Questo consente di generare classi in maniera semplice senza avere nessun riferimento al db e di lasciare tutto il mapping ad EF. Non so onestamente come si gestiscono feature come l'ereditariet&#224;, ma vedremo. questo approccio &#232; sicuramente interessante quando il domain model &#232; molto semplice.&lt;/p&gt; &lt;p&gt;Un'altro scenario supportato dal designer &#232; quello di disegnare visualmente le classi e generare direttamente il database dalla loro struttura. Ad ogni cambiamento delle classi si da ora a possibilit&#224; di allineare il database, Questa cosa mi piace di meno perch&#232; la vedo pericolosa, ma comunque in uno scenario di Domain-Model first ha il suo perch&#232;.&lt;/p&gt; &lt;p&gt;Il lazy loading viene ora implementato in maniera trasparente impostando la propriet&#224; deferredloadingenabled dell'objectcontext a true (non ricorda vagamente linq to sql?). Ovviamente, per mantenere la compatibilit&#224;, questa propriet&#224; di default &#232; a false e va impostata oni volta a true (se se ne ha bisogno).&lt;/p&gt; &lt;p&gt;Insomma, Entity Framework sembra diventare sempre pi&#249; potente. Se alcuni problemi di mapping verranno risolti ed il designer viene reso stabile, penso che avremo per le mani un gran bel prodotto pronto per competere con tutti gli altri.&lt;/p&gt; &lt;p&gt;Stay Tuned...&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Tags:&lt;/strong&gt; &lt;a href=&quot;http://tags.aspitalia.com/.NET_Framework_3.5/&quot; rel=&quot;tag&quot;&gt;.NET Framework 3.5&lt;/a&gt;, &lt;a href=&quot;http://tags.aspitalia.com/ADO.NET_Entity_Framework/&quot; rel=&quot;tag&quot;&gt;ADO.NET Entity Framework&lt;/a&gt;, &lt;a href=&quot;http://tags.aspitalia.com/LINQ/&quot; rel=&quot;tag&quot;&gt;LINQ&lt;/a&gt;, &lt;a href=&quot;http://tags.aspitalia.com/ORM/&quot; rel=&quot;tag&quot;&gt;ORM&lt;/a&gt;, &lt;a href=&quot;http://tags.aspitalia.com/PDC_2008/&quot; rel=&quot;tag&quot;&gt;PDC 2008&lt;/a&gt;&lt;/p&gt;&lt;hr /&gt;&lt;p&gt;&lt;a href=&quot;http://www.aspitalia.com/&quot;&gt;(C) 2009 ASPItalia.com Network - All rights reserved&lt;/a&gt;&lt;/p&gt;</content><author><name>Stefano Mostarda</name></author><category term="PDC 2008"/><link rel="alternate" type="text/html" href="http://blogs.aspitalia.com/sm15455/post2425/Entity-Framework-VNext.aspx"/><slash:comments>0</slash:comments><wfw:comment>http://blogs.aspitalia.com/sm15455/post2425/Entity-Framework-VNext.aspx#feedback</wfw:comment><wfw:commentRss>http://blogs.aspitalia.com/SM15455/CommentRSS2425.aspx</wfw:commentRss><trackback:ping>http://blogs.aspitalia.com/services/trackback.aspx?PostID=2425</trackback:ping></entry><entry><title>Cache a tutta Velocity</title><id>http://blogs.aspitalia.com/sm15455/post2423/Cache-Velocity.aspx</id><updated>2008-10-29T00:26:54+00:00</updated><content type="text/html">&lt;img src='http://blogs.aspitalia.com/services/counter_rss.aspx?PostID=2423' border=&quot;0&quot; style=&quot;width:1px; height:1px;&quot; /&gt;&lt;p&gt;Titolo banalissimo ma la giornata l'ho dedicata a Velocity. Visto che oggi &#232; stata anche rilasciata la CTP2 perch&#232; non dargli una vera occhiata da vicino. La prima sessione ha mostrato quello che gi&#224; si sapeva dalla CTP1 ovvero la suddivisione in l'architettura di base che ogni developer deve conoscere per usare velocity, mentre la seconda ha mostrato la vera potenza di questo framework di caching. Infatti sono state mostrate alcune cose che spiegano come il prodotto sia ben fatto.&lt;/p&gt; &lt;p&gt;Innanzitutto c'&#232; una gestione dei lock, quindi si possono recuperare oggetti e loccarli fino al rilascio o alla scadenza di un tempo (Ovviamente ci sono 2 API distinte una per recuperare i dati senza lockare e un aper locckare). Quello che pi&#249; mi piace &#232; il lock ottimistico dei dati. Ogni dato in cache ha un numero di versione e quindi se lo si recupera e poi riaggiorna, ma nel frattempo qualche altro processo ha modificato il dato nella cache, l'aggiornamento&amp;nbsp; va male. Insomma un locking ottimistico come sul database.&lt;/p&gt; &lt;p&gt;La replicazione della cache &#232; fantastica in quanto avviene in un thread separato e quindi le performance dell'applicazione non vengono intaccate. Ovviamente in caso di caduta di un nodo, i dati sono replicati e velocity &#232; in grado di recuperare comunque i dati senza causare problemi all'applicazione che rimane &amp;quot;ignorante&amp;quot; da questi problemi. Ovviamente velocity pu&#242; essere usato anche in locale e vedendo come la cache di ASP.NET cede di fronte a carichi elevati, questa &#232; una buona cosa.&lt;/p&gt; &lt;p&gt;La cosa che comunque pi&#249; mi piace &#232; che gli oggetti possono essere ritrovati usando LINQ. Sebbene questa cosa era scontata, la cosa bella &#232; che la ricerca avviene tramite un provider che implementa IQueryable&amp;lt;T&amp;gt; e non tramite la classica ricerca IEnumerable&amp;lt;T&amp;gt;.&lt;/p&gt; &lt;p&gt;Naturalmente, Velocity usa WCF come meccanismo di trasporto quindi ho qualche dubbio sulle performance reali, ma stando alle statistiche che hanno mostrato sembra che abbiano trovato la chiave per spingere sull'accelleratore.&lt;/p&gt; &lt;p&gt;Che dire Velocity sembra promettente, speriamo bene :)&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Stay tuned...&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Tags:&lt;/strong&gt; &lt;a href=&quot;http://tags.aspitalia.com/Cache/&quot; rel=&quot;tag&quot;&gt;Cache&lt;/a&gt;, &lt;a href=&quot;http://tags.aspitalia.com/PDC_2008/&quot; rel=&quot;tag&quot;&gt;PDC 2008&lt;/a&gt;, &lt;a href=&quot;http://tags.aspitalia.com/Architettura/&quot; rel=&quot;tag&quot;&gt;Architettura&lt;/a&gt;&lt;/p&gt;&lt;hr /&gt;&lt;p&gt;&lt;a href=&quot;http://www.aspitalia.com/&quot;&gt;(C) 2009 ASPItalia.com Network - All rights reserved&lt;/a&gt;&lt;/p&gt;</content><author><name>Stefano Mostarda</name></author><category term="PDC 2008"/><link rel="alternate" type="text/html" href="http://blogs.aspitalia.com/sm15455/post2423/Cache-Velocity.aspx"/><slash:comments>0</slash:comments><wfw:comment>http://blogs.aspitalia.com/sm15455/post2423/Cache-Velocity.aspx#feedback</wfw:comment><wfw:commentRss>http://blogs.aspitalia.com/SM15455/CommentRSS2423.aspx</wfw:commentRss><trackback:ping>http://blogs.aspitalia.com/services/trackback.aspx?PostID=2423</trackback:ping></entry><entry><title>Svelato il C# 4.0 alla PDC</title><id>http://blogs.aspitalia.com/sm15455/post2417/Svelato-CSharp-4.0-PDC.aspx</id><updated>2008-10-27T22:12:00+00:00</updated><content type="text/html">&lt;img src='http://blogs.aspitalia.com/services/counter_rss.aspx?PostID=2417' border=&quot;0&quot; style=&quot;width:1px; height:1px;&quot; /&gt;
&lt;p&gt;I tre mariachi stanno seguendo in questo momento la sessione sul C# 
4.0 alla PDC. Come sempre Anders Hejsberg &#232; il mattatore della scena e sta 
spiegando il futuro come solo il pap&#224; del linguaggio sa fare. &lt;br /&gt;&lt;/p&gt;
&lt;p&gt;Le novit&#224; sono molto interessanti.&lt;/p&gt;
&lt;p&gt;La principale, come tutti sanno, &#232; che il C# supporter&#224; i linguaggi dinamici 
attraverso una nuova parola chiave dynamic. Questa &#232; una piccola svolta nel 
mondo statico del C#, infatti d'ora in poi potremo aggiungere nuove propriet&#224; a 
qualunque classe direttamente a runtime. Sinceramente questa cosa non dico che &#232; 
una mezza schifezza, ma come minimo mi lascia perplesso. Non dubito che i 
linguaggi dinamici abbiano una loro posizione, ma fino ad adesso non mi &#232; mai 
capitato di avere bisogno di questa feature nelle mie applicazioni. 
Vedremo...&lt;/p&gt;

&lt;p&gt;Un'altra importante novit&#224; &#232; la riscrittura del compilatore che adesso 
diventa un servizio (Compiler as a Service mi dice Ughetto) che espone le 
porprie API permettendo una nuova serie di funzionalit&#224;&#160; e la semplificazione di 
alcune esistenti. Adesso potremo scrivere codice C# in una stringa ed eseguirla 
a runtime evitando di usare la reflection. Insomma se non si era ancora capito, 
la tipizzazione sembra diventare sempre meno importante. :)&lt;/p&gt;


&lt;p&gt;Poi c'&#232; la covarianza per quanto riguarda le liste di oggetti. Non &#232; che ci ho onestamente capito molto, quindi aspetto Cristian che sicuramente sapr&#224; spiegare meglio di me :).&lt;br /&gt;&lt;/p&gt;&lt;p&gt;L'ultima novit&#224; che mi ricordo riguarda la possibilit&#224; di assegnare un valore 
di default ai parametri delle funzioni e di poter passare alle funzioni i 
parametri specificando il nome. Quest significa che se una funzione accetta 10 
parametri, ma ne dobbiamo passare solo 2 e gli altri possono mantenere quello di 
default possiamo scrivere qualcosa del genere: Call(par1: &amp;quot;Valore&amp;quot;, par2: 
2); &lt;br /&gt;&lt;/p&gt;
&lt;p&gt;Insomma niente di particolarmente emozionante, io non vedo molto bene la 
mancanza di tipizzazione. Che ci volete fare, gi&#224; solo vedere che&#160;la dinamicit&#224; 
in C# &#232; abbilitata grazie ad una classe statica che si chiama Dynamic non &#232; il 
massimo :)&lt;/p&gt;

&lt;p&gt;Stay tuned...&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Tags:&lt;/strong&gt; &lt;a href=&quot;http://tags.aspitalia.com/.NET_Framework/&quot; rel=&quot;tag&quot;&gt;.NET Framework&lt;/a&gt;, &lt;a href=&quot;http://tags.aspitalia.com/.NET_Framework_4.0/&quot; rel=&quot;tag&quot;&gt;.NET Framework 4.0&lt;/a&gt;, &lt;a href=&quot;http://tags.aspitalia.com/PDC_2008/&quot; rel=&quot;tag&quot;&gt;PDC 2008&lt;/a&gt;&lt;/p&gt;&lt;hr /&gt;&lt;p&gt;&lt;a href=&quot;http://www.aspitalia.com/&quot;&gt;(C) 2009 ASPItalia.com Network - All rights reserved&lt;/a&gt;&lt;/p&gt;</content><author><name>Stefano Mostarda</name></author><category term="PDC 2008"/><link rel="alternate" type="text/html" href="http://blogs.aspitalia.com/sm15455/post2417/Svelato-CSharp-4.0-PDC.aspx"/><slash:comments>1</slash:comments><wfw:comment>http://blogs.aspitalia.com/sm15455/post2417/Svelato-CSharp-4.0-PDC.aspx#feedback</wfw:comment><wfw:commentRss>http://blogs.aspitalia.com/SM15455/CommentRSS2417.aspx</wfw:commentRss><trackback:ping>http://blogs.aspitalia.com/services/trackback.aspx?PostID=2417</trackback:ping></entry><entry><title>Chi si ricorda dei DataSet?</title><id>http://blogs.aspitalia.com/sm15455/post2402/Ricorda-DataSet.aspx</id><updated>2008-10-08T20:04:38+00:00</updated><content type="text/html">&lt;img src='http://blogs.aspitalia.com/services/counter_rss.aspx?PostID=2402' border=&quot;0&quot; style=&quot;width:1px; height:1px;&quot; /&gt;&lt;p&gt;Mi ricordo le prime demo che ho visto riguardo al .NET. Per l'accesso ai dati il DataSet sembrava l'autentica panacea per tutti i mali. A distanza di ormai 7 anni (un'infinit&#224; in termini informatici), i DataSet sono diventati il male impersonificato. &lt;/p&gt; &lt;p&gt;Fondamentalmente questo &#232; quanto di meglio potesse accadere per certi tipi di applicazioni, ma parliamoci chiaro, in Italia si fanno una miriade di piccole-medie applicazioni che non hanno alcuna complessit&#224; e che quindi non trarrebbero vantaggio alcuno dall'uso di un bel domain model con un datalayer che persiste tramite ORM o a mano. In questi casi i DataSet non sono solo la linea pi&#249; veloce, ma anche quella pi&#249; giusta. Se una piccola applicazione &#232; pagata poco o necessit&#224; di essere sviluppata in poco tempo, i DataSet offrono quella velocit&#224; di sviluppo e semplicit&#224; di apprendimento che un'applicazione con domain model non offre. &lt;/p&gt; &lt;p&gt;Insomma tutto questo discorso per dire che per la voglia di sfighettare, si finisce spesso per costruire dei castelli quando basterebbe un appartamento da 50Mq. Ho visto un'applicazione scritta con domain model che gestisce solo 4/5 entit&#224; e richiede quindi almeno il doppio del codice rispetto al dataset. Per carit&#224;, l'applicazione &#232; performante e bella da vedere, ma con i dataset la si faceva ancora in quasi met&#224; tempo e senza grandi sforzi. La domanda interessante e che quando ho chiesto il perch&#232; di questa scelta la risposta &#232; stata: &amp;quot;i dataset sono il male, fare un tree tier aiuta a mantenere tutto pulito&amp;quot;. Ineccepibile, se non fosse che per finire l'applicazione ci hanno messo 5 giorni in pi&#249; in 2 persone. &lt;/p&gt; &lt;p&gt;Il consiglio &#232; sempre lo stesso: fidatevi ancora dei dataset. Non hanno un campo di applicazione ampio, ma ce l'hanno e forse potrebbe essere proprio il vostro :D.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Stay tuned...&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Tags:&lt;/strong&gt; &lt;a href=&quot;http://tags.aspitalia.com/ADO.NET/&quot; rel=&quot;tag&quot;&gt;ADO.NET&lt;/a&gt;, &lt;a href=&quot;http://tags.aspitalia.com/Architettura/&quot; rel=&quot;tag&quot;&gt;Architettura&lt;/a&gt;, &lt;a href=&quot;http://tags.aspitalia.com/ORM/&quot; rel=&quot;tag&quot;&gt;ORM&lt;/a&gt;, &lt;a href=&quot;http://tags.aspitalia.com/Pattern/&quot; rel=&quot;tag&quot;&gt;Pattern&lt;/a&gt;&lt;/p&gt;&lt;hr /&gt;&lt;p&gt;&lt;a href=&quot;http://www.aspitalia.com/&quot;&gt;(C) 2009 ASPItalia.com Network - All rights reserved&lt;/a&gt;&lt;/p&gt;</content><author><name>Stefano Mostarda</name></author><category term="Design Patterns"/><link rel="alternate" type="text/html" href="http://blogs.aspitalia.com/sm15455/post2402/Ricorda-DataSet.aspx"/><slash:comments>12</slash:comments><wfw:comment>http://blogs.aspitalia.com/sm15455/post2402/Ricorda-DataSet.aspx#feedback</wfw:comment><wfw:commentRss>http://blogs.aspitalia.com/SM15455/CommentRSS2402.aspx</wfw:commentRss><trackback:ping>http://blogs.aspitalia.com/services/trackback.aspx?PostID=2402</trackback:ping></entry></feed>