Entity Framework Reverse POCO Generator per Visual Studio: Introduzione (it-IT)
Finalità
In questo articolo tratteremo l'utilizzo di base di un modello di oggetto integrabile in Visual Studio e decisamente utile per lavorare, mediante l'ORM Entity Framework, in modalità Code-First. Tale modello è chiamato EntityFramework Reverse POCO Generator, ed è scaricabile direttamente in Visual Studio dai Templates dedicati all'ambito Data. Vedremo più informazioni in merito nel proseguo dell'articolo.
Introduzione
Come ormai ampiamente noto, la nuova release di Entity Framework, 7.x o Core, non supporta la modalità Database-First, molto comoda per l'appunto nei casi in cui si vada a creare un modello dati sulla base di un database preesistente, ma anche per la gestione dei modelli EDMX, che permettono la rappresentazione grafica delle entità derivate, così come una gestione più fluida e, se vogliamo, semplificata, riguardo all'aggiornamento del modello dati stesso. Operazioni come aggiunta di tabelle, loro rimozione o modifica, risultano infatti più agevoli con EF6. Code-First, dal canto suo, possiede una flessibilità maggiore, ed in progetti di un certo spessore (che magari prevedano la delocalizzazione del modello dati su DLL, o con modelli molto complessi) può essere preferibile.
Code-First, nonostante la sua denominazione, si adatta perfettamente a database già esistenti, ed anzi permette di derivare anche solo parzialmente delle entità, potendo definire in maniera incompleta i campi che si trovano sulle tabelle, riducendoli a quanto i nostri applicativi utilizzeranno. Ovviamente, da questo discorso vanno escluse tutte quelle condizioni che possono essere di impedimento alla corretta referenzialità o congruenza dei dati. Il problema principale resta comunque il fatto che - dovendo lavorare su un database fatto e finito - lo sviluppatore dovrà comunque definire il contesto dati e tutte le classi che rappresentano le tabelle esistenti o, in ogni caso, da utilizzare. Se ciò può essere un compito banale su database e tabelle di modeste dimensioni, lo stesso non può dirsi per basi dati costituite da un numero di entità superiore alle centinaia, in cui ogni tabella possieda decine di campi e ciascuno sia parametrizzato in modo molto preciso (come, d'altra parte, ci attenderemmo che fosse).
Nel caso di Database-First, la soluzione sarebbe semplice: apriremmo il modello EDMX, ed andremmo ad aggiornarlo selezionando le entità da aggiungere o rimuovere, lasciando ad EF il compito di rimodellare le classi. Su Code-First, al di là dell'intervento manuale a cui siamo chiamati, può essere utile disporre di tools che ci aiutino ad automatizzare la creazione delle entità POCO (Plain-Old CLR Object), in modo da realizzare in maniera più agevole e graduale l'implementazione delle classi necessarie ai nostri progetti. Ed è qui che la soluzione ideata da Simon Hughes ci viene in soccorso.
EntityFramework Reverse POCO Generator
Come descritto dalla pagina di Visual Studio Gallery in cui è possibile scaricare questo strumento (si veda al termine del presente articolo), EntityFramework Reverse POCO Generator permette di eseguire il reverse engineering di una base dati esistente, generando le classi POCO, i Configuration Mappings, ed il DbContext. Supporta l'interfacciamento con SQL Server, sia nella sua versione desktop che Compact 4.0. Nel proseguo dell'articolo vedremo gli accorgimenti basilari per utilizzarlo, ed effettueremo un test su una base dati ridotta, che non permette di apprezzarne appieno la comodità. Al lettore sarà sufficiente eseguire altre prove con database importanti per rendersi conto di come uno strumento di questo tipo sia decisamente vantaggioso.
Download ed installazione
Una volta all'interno della nostra soluzione, ed avendo precedentemente installato Entity Framework (versione 6.x o 7.x), procediamo all'inserimento di un nuovo oggetto. Rechiamoci all'interno della sezione «Data» e clicchiamo su «Click here to go online and find templates».
Con ogni probabilità, EntityFramework Reverse POCO Generator sarà il primo risultato della lista Templates, tuttavia se così non dovesse essere, sarà sufficiente digitare le parole che compongono il nome dello strumento nella barra di ricerca presente sulla finestra.
Decidiamo il nome che dovrà avere il file T4, e procediamo quindi ad aggiungerlo alla nostra soluzione mediante la pressione del tasto «Add». Verrà quindi avviato il VSIX Installer per il download e l'installazione del tool, per il cui corretto utilizzo ci verrà suggerito il riavvio di Visual Studio.
Un primo colpo d'occhio
Vediamo quindi come EntityFramework Reverse POCO Generator abbia incluso nella nostra soluzione diversi files. Quelli su cui lavoreremo sono il file di template (nel caso in articolo, Database1.tt) e - secondariamente, e qualora richiesto - sul file di classe ad esso collegato (in articolo, Database1.cs). Questo secondo file finirà per contenere, una volta che il template sarà correttamente configurato e salvato, il DbContext selezionato, così come l'intera lista delle entità e dei mappings che avremo selezionato. Notiamo però come, appena visualizzato il file T4, l'IDE ci avvisi di un errore di referenza nulla: ciò accade in quanto, per operare correttamente, il template necessità di trovare, nel file di configurazione, una stringa di connessione valida da referenziare.
Teniamo comunque conto del fatto che tale stringa potrà essere rimossa dal file App.config una volta generato il modello, e vada nuovamente inclusa solo nel caso sia necessario aggiornarlo. Questo è un aspetto importante, in quanto, se per esempio si decide di delocalizzare il modello dati in una DLL separata dal progetto principale, verosimilmente non vorremo che la DLL dipenda da stringhe di connessione non imposte dal progetto principale. Faremo tra poco ulteriori considerazioni in merito.
Configurazione
Apriamo quindi il file App.config, ed inseriamo, come nell'immagine seguente, una stringa di connessione sul modello di questa:
<connectionStrings>
<add name="MyDbContext"
providerName="System.Data.SqlClient"
connectionString="Data Source=(local);Initial Catalog=MyDatabase;Integrated Security=True;
Application Name=MyApp" />
</connectionStrings>
Ovviamente, sarà necessario personalizzarla con i dati di connessione verso la propria base dati. Ciò che qui è importante, è il nome da assegnare alla connessione, che deve essere uguale a quanto nel file T4 è il parametro ConnectionStringName, valori entrambi modificabili dallo sviluppatore.
Se in questo momento salvassimo il file T4, verrebbe creato il contesto dati e le classi di ogni oggetto presente nel database referenziato. Vale allora la pena sottolineare quelle che sono le impostazioni di base accettate all'interno del file di template, che permettono una parametrizzazione decisamente personalizzata di quanto verrà creato.
Parametro | Utilizzo |
ConnectionStringName | È il nome della stringa di connessione utilizzata dal template |
DbContextName | Rappresenta il nome che verrà assegnato all'oggetto DbContext creato |
GenerateSeparateFiles |
Consente di create un file di classe separato per ciascun oggetto IncludeViews permette di specificare se includere nel modello dati le viste |
Inflector.PluralizationService |
Comanda le impostazioni legate alla pluralizzazione delle entità (nella maggior parte dei casi, può essere desiderabile disabilitarlo) |
IncludeStoredProcedures | Permette di specificare se includere nel modello dati le stored procedures |
TableFilterInclude |
Espressione regolare che indica quali tabelle derivare |
TableFilterExclude | Espressione regolare che indica quali tabelle tralasciare |
StoredProcedureFilterInclude |
Espressione regolare che indica quali stored procedures derivare |
StoredProcedureFilterExclude |
Espressione regolare che indica quali stored procedures tralasciare |
Per la creazione delle espressioni regolari relative agli oggetti da includere nella procedura, esiste un tool grafico scaricabile a questo indirizzo: https://efreversepocoui.codeplex.com/.
Oltre alle impostazioni summenzionate, se ne noteranno molte altre, che il lettore può sperimentare e personalizzare secondo necessità: il template è infatti ben documentato, e di semplice comprensione. Una volta completate le modifiche sul file T4, sarà possibile salvarlo. Se tutto è stato correttamente configurato, verranno prodotte le entità specificate.
Le operazioni di cui sopra, dalla definizione della connessione al salvataggio del template T4 andranno ripetute ovviamente in tutti quei casi che necessitano di una nuova derivazione del modello dati. Da tale passaggio in poi, sarà possibile intervenire come di consueto, utilizzando le classi così create per le normali operazioni di gestione del contesto. Alcune nozioni sull'utilizzo del modello Code-First sono state fornite nell'articolo «Introduzione ad Entity Framework con C#, parte II: Code-First e Migrazioni (it-IT)», a cui si rimanda per ulteriori approfondimenti.
Download
EntityFramework Reverse POCO Generator è scaricabile come pacchetto integrabile in Visual Studio all'indirizzo: [https://visualstudiogallery.msdn.microsoft.com/ee4fcff9-0c4c-4179-afd9-7a2fb90f5838
](https://visualstudiogallery.msdn.microsoft.com/ee4fcff9-0c4c-4179-afd9-7a2fb90f5838)
Approfondimenti su Entity Framework
- Introduzione ad Entity Framework con C#, parte I (it-IT)
- Introduzione ad Entity Framework con C#, parte II: Code-First e Migrazioni (it-IT)
- Channel 9: Introduzione ad Entity Framework con C#
Altre lingue
Il presente articolo è inoltre disponibile nelle seguenti localizzazioni