Beren.it

All that you can leave behind

Dalì a Milano

Dal 22/09/2010 al 30/01/2011 presso il Palazzo Reale di Milano è allestita una mostra su Salvador Dalì. Premettendo che io di arte ci capisco più o meno quanto un gelataio può capire di ginecologia, e che ci sono andato solo trascinato a forza da una mia amica che ringrazio infinitamente, mi va di sponsorizzare fortemente un'esperienza d'impatto e per la quale vale spendere qualche ora/euro. Le opere presenti non sono tantissime, ma rappresentano comunque un pò tutto lo spettro della sua opera. Da non sottovalutare anche un paio di interviste in cui l'artista pone non poco accento su quelli che sono gli argomenti che un pò tutti ci troviamo ad affrontare nella vita: soldi, erotismo, morte...

Promozione 2010: si comincia!

Ci eravamo lasciati lo scorso Maggio con l'ultima partita casalinga e l'addio concomitante di un mostro sacro della pallacanestro varesina come Giorgio Briccola e da allora sembra che siano davvero trascorsi anni luce. Il Borsano 2010/11 è una squadra profondamente rinnovata con l'innesto di giovani in tutti i ruoli e dunque con un'identità di squadra ancora ben lontana dall'essere trovata. Del resto il precampionato parla chiaro: tra amichevoli e tornei vari la squadra di Castiglioni non è riuscita a raccimolare nemmeno una vittoria e per quanto effettivamente alcune sconfitte siano state di piccolla misura è sentire comune che la quadratura del cerchio sia ancora lontana. L'impegno non manca, anzi l'intensità in allenamento è quasi sempre a buoni livelli ma la mancanza di esperienza a livelli senior di molti dei ragazzi inseriti quest'anno ha finora giocato un ruolo fondamentale.

L'errore più grande ora è avere fretta. Fretta di avere risultati. La pallacanestro, così come tutti gli sport di squadra, ha bisogno di tempo e meccanismi ben oliati per funzionare a dovere. Una volta assimilato questo principio base, si può avere la serenità e la convinzione necessarie per affrontare un campionato che, come si sa, pur non essendo di qualità eccelsa è comunque difficile partita per partita. Si comincia questa sera al Palazzetto di via Ariosto a Busto Arsizio contro Cavaria, poi due trasferte a Castronno e Gavirate (due delle quattro squadre che hanno affrontato i play-off l'anno passato). Adesso occorre semplicemente mettersi a giocare dando il massimo e cercando di divertirsi nei limiti del possibile...

FORZA BORSANO!!!!

Dynamic Data Entities - Customization Parte 1 - Name & Scaffolding

In un post di qualche giorno fa illustravo la facilità con cui realizzare una web application per il data entry attraverso l'utilizzo dei Dynamic Data Entities. Ora proseguo in questo argomento illustrando come procedere con la customizzazione di quanto automaticamente prodotto dal template di Visual Studio. Apriamo ad esempio la pagina principale dell'applicazione.

Effettivamente la web application ha l'elenco completo delle tabelle come si vede dall'immagine qui sopra. Però supponiamo che non tutte le tabelle siano da visualizzare. Per nascondere o visualizzare le tabelle bisogna agire sulla proprietà di ScaffolAllTables che abbiamo già visto essere settata all'interno del file Global.asax. Essa infatti se settata a true informa il framework che tutte le tabelle presenti nello schema edmx devono esssere visualizzabili.

[C#]

    DefaultModel.RegisterContext(typeof(FOFEntities), 
    new ContextConfiguration() { ScaffoldAllTables = false });

Settiamo dunque a False tale property, ma questo non basta infatti se lanciamo l'applicazione verrà sollevata un'eccezione. In effetti l'applicazione in questo modo non ha nessuna table da visualizzare, quindi bisogna trovare una maniera per informare il framework quale tabele specifiche mostrare dal momento che non le deve visualizzare tutto. In generale questo tipo di operazioni di customizzazione si applicano all'entity framework decorando le classi con attributi specifici. Ad esempio se volessimo indicare una tabella, o meglio la classe che la rappresenta nel file edmx, come visualizzabile dall'applicazione dovremmo usare l'attributo ScaffoldTable(true) e collocarlo appena prima della dichiarazione. Non è però nelle best practice questa operazione, inquanto dovrebbe andare a modificare un file autogenerato qual'è il Designer del edmx. Infatti se la struttura del database cambiasse per una qualche ragione e volessimo aggiornare il file edmx attraverso l'interfaccia del designer, tutte le modifiche apportate manualmente andrebbero perse...
Che fare dunque? Fortunatamente le Partial Classes di .NET ci vengono in aiuto e ci forniscono un efficiente workaround al problema consentendo di separare in un altro file tutte le personalizzazioni realizzate manualmente. Aggiungendo infatti un file cs al progetto. A questo punto prendiamo il nome della classe che si riferisce alla tabella che vogliamo visualizzare e ne scriviamo la definizione partial. In questa classe però non andremmo a specificare nient'altro ad esccezione di un attributo MetadataType che serve a linkare alla classe stessa una classe di metadata appunto.

[C#]

    [MetadataType(typeof(TB_SEASONMetadata))]
    public partial class TB_SEASON
    {

    }

    [ScaffoldTable(true)]
    [TableName("Stagione")]
    public class TB_SEASONMetadata
    {
        ...
    }

E' in questa classe di metadata che andremo a specificare tutte le customizzazioni che ci interessano. In particolare nel nostro caso sfrutteremo il già sopra citato attributo ScaffoldTable(true) che indica al framework che questa classe è gestibile dal sistema ed un altro attribute di nome TableName che serve a rinominare la tabella e nel nostro caso utilizzeremo per passare dal nome poco user-friendly "TB_SEASON" a "Stagione". Compiliamo, refreshamo la pagina. Ed otteniamo il risultato desiderato. Una sola tabella visualizzata nell'elenco e con un nome maggiormente esplicativo.

La partita perfetta

Gianni Brera definiva in questo modo uno 0 a 0. La partita perfetta, perchè priva di errori: 0 a 0 appunto... Sinceramente non sono mai stato daccordo con questa definizione, perchè finisce con l'affermare l'assioma gol=errore, cosa che se da un lato è spesso verificata dall'altro non tiene conto della qualità di una giocata o del caso, che in un gioco fatto di episodi com'è il calcio riveste la sua importanza. Detto questo e toltomi il cappello difronte ad una penna tanto rimpianta in questi tempi di giornalisti-tifosi sgrammaticati, devo dire con piacere che il pareggio dell'altra sera al Meazza ha dimostrato senza dubbio che un pareggio senza reti può talvolta essere latore di una bella partita combattuta e tuttaltro che priva di emozioni. Chi si aspettava una Juve tutto attacco e poca difesa, come un pò anche il sottoscritto, è rimasto sorpreso di vedere una squadra che pur con le inevitabili incertezze dovute alla giovane età e all'ancora non perfetto affiatamento ha certamente retto il confronto con i campioni d'Italia.

Un derby d'Italia soddisfacente sopreattutto se si considera che è stato il primo per me dal vivo, per di più immezzo ad una marea nero-azzurra anche se spalleggiato da due colleghi Juventini DOC e calbresi DOC. Lo zero a zero è stato il risultato ideale, non oso immaginare che sarebbe accaduto in caso di gol da una o dall'altra parte, temo avremmo fatto davvero fatica a camuffarci... In fondo domenica scorsa da San Siro non è uscita imbattuta solo la tanto amata Vecchia Signora ma anche noi.

Dynamic Data Entity: una web application per il data entry in pochi click

Una cosa che capita spesso di realizzare in ambito web è creare un'interfaccia che riesca a fornirici un buon supporto per le modifiche di una base dati. Purtroppo ciò in passato richiedeva montagne di righe di codice spesso ripetitivo e noioso prima di arrivare a produrre anche solo un paio di pagine per interfacciarsi ad altrettante tabelle. Dal framework 3.5 sp1 in poi però, Microsoft ha introdotto una nuova tipologia di web application out-of-the-box in grado di ridurre sensibilmente questa fase assai laboriosa di stesura del codice per il layer dati e la sua visualizzazione in pagine user frendly.

Vediamo più nei dettagli come funziona il tutto. Per l'esperimento servono un database con alcune tabelle in relazione per le quali vogliamo creare una web application che ci fornisca la possibilità di realizzare le classiche operazioni CRUD (Create Read Update Delete). Una volta trovata la base dati che fa al caso nostro basta aprire Visual Studio 2010 e una volta cliccato sul tasto crea nuovo progetto, dai template presenti selezionare "ASP.NET Dynamic Data Entities Web Application".

Una volta effettuata questa operazione avremo già una serie di cartelle nell'albero del progetto che sono utilizzate dal framework. A questo punto dovremo linkare il database che ci serve al fine di poterlo amministrare attraverso l'applicazione. Ci posizioniamo dunque sulla root del progetto e clicchiamo su "Add New Item".

Selezioniamo "ADO.NET Entity Data Model". Questo vi porterà all'interno di un wizard per la selezione del database qualora esistesse già oppure ad un modello vuoto se non esistesse uno già pronto. Nel nostro caso partiamo da un db esistente e dunque scegliamo la prima opzione.

Fatto questo, una volta selezionata la connessione desiderata possiamo selezionare quali elementi del database importare in termini di Tabelle, Viste e Stored Procedure. Quindi premendo Finish, troveremo un file edmx nella root dell'applicazione che è a tutti gli effetti il nostro Entity Model Appena Creato.

Bene. Se a questo punto proviamo a lanciare l'applicazione però ci viene ritornato una errore che recita "There are no accessible tables. Make sure that at least one data model is registered in Global.asax and scaffolding is enabled or implement custom pages.". Questo perchè dobbiamo dire all'applicazione che si deve pluggare all'Entities model appena creato. Farlo è molto semplice basta infatti aprire il file Global.asax (come del resto ben suggerito dal messaggio di errore) e decommentare una line di codice commentata sostituendo alla parola "YourDataContextType" il nome della classe generata nel file edmx, che trovate nel file designer all'interno della region "Contexts".

Se però proviamo a lanciare l'applicazione ora riceveremo ancora l'errore di prima. Questo perchè in effetti nella riga di codice decommentata poco fa abbiamo lasciato il frammento in cui si setta a false la property "ScaffoldAllTables". Settandola a true automaticamente tutte le tabelle saranno visibili ed editabili. Salviamo, buildiamo e voilat il gioco è fatto l'applicazione gira e funziona perfettamente. Abbiamo l'elenco completo delle tabelle e per ognuna possiamo effettuare ogni tipo di modifica il tutto con i benefici delle validationa Ajax automaticamente embeddate senza scrivere una linea di codice! Provare per credere.