Una delle tecnologie che negli ultimi anni hanno contribuito a rendere più semplice l’utilizzo di un RDBMS all’interno di una qualsiasi applicazione .NET è senza dubbio Entity Framework (EF).
L’uso di Entity Framework è spiegato nel sito di riferimento
https://msdn.microsoft.com/en-us/data/ef.aspx
ma tutti gli esempi si appoggiano al db di casa Microsoft SQL Server.
Trovare sul web una sessione di SQL Server economica è abbastanza difficile mentre l’hosting gratuito per mySQL è una cosa ormai normale.
Anche sul sito di mySQL le cose non vanno meglio, l’esempio risale a qualche anno fa e utilizza WinForm e un vecchio Visual Studio
http://dev.mysql.com/doc/connector-net/en/connector-net-tutorials-entity-framework-winform-data-source.html
Quindi ho voluto fare una prova con la mia sessione di mySQL che ho in linea presso UnoEuro.
Funziona!
Ecco l’elenco delle cose che servono:
– I componenti client di mySQL scaricabili dal sito di mySQL
http://dev.mysql.com/downloads/file.php?id=456518
– Le DLL per .NET che consentono di utilizzare EF con mySQL impacchettare in questo Nuget https://www.nuget.org/packages/MySql.Data.Entity/
Si parte
Scarichiamo componenti client di mySQL
Li installiamo
Una volta installati i componenti client mi accorgo che dentro all’installazione c’è un manager per mySQL molto molto bello (si chiama mySQL Workbench)
Lo lancio e creo subito una connessione verso il mio DB
che una volta attivata mostra un bell’ambiente di amministrazione (finalmente!!! ci voleva proprio!)
Apro il mio db ed ecco il risultato
Ora passiamo a Visual Studio.
Creiamo una applicazione WPF (la prossima prova è per ASP.NET MVC 5) e lanciamo la console di gestione di NuGet
dalla quale lanciamo l’installazione del Data Entity per mySQL
A questo punto è necessario compilare prima di proseguire, pena il messaggio di errore riportato più avanti!!!
Bene!
Ora, aprendo il file App.config, noto che la stringa di connessione non è presente.
Dobbiamo trovare un modo per farcela creare… VS sa come fare!!
Il sistema è quello di creare un nuovo Entity Data Model con il suo wizard quindi lo aggiungiamo cliccando destro sul progetto –> Aggiungi – > Nuovo Elemento
Ecco.
Manca la stringa di connessione!! (la combobox è vuota)
Possiamo quindi lanciare il wizard per crearne una nuova
Procediamo scegliendo il giusto provider (vogliamo usare mySQL, non SQL Server)
A questo punto possiamo inserire i dati di login forniti da Unoeuro…
Cavolo! Funziona!
Per accendere il pulsante avanti, è necessario che tutto sia a posto come in questo screen shoot
Attenti… qualcosa non funziona come dicevamo.
Ci sono alcuni componenti del pacchetto NuGet infatti che vanno compilati!
Se non abbiamo compilato la soluzione prima di partire, appare questo errore
Se tutto è OK, appare la stringa di connessione in App.config
Il wizard ha letto la mia tabella su mySQL e l’ha “Ormizzata†a dovere!!! 🙂
namespace WpfApplication3 { using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; using System.Data.Entity.Spatial; [Table("maurizioconti_com_db.tblDiplomati")] public partial class tblDiplomati { [Key] [Column(Order = 0)] [StringLength(50)] public string Nome { get; set; } [Key] [Column(Order = 1)] [StringLength(50)] public string Cognome { get; set; } [Key] [Column(Order = 2)] public int id { get; set; } } }
E poi ha creato il DbContext in modo automatico.
namespace WpfApplication3 { using System; using System.Data.Entity; using System.ComponentModel.DataAnnotations.Schema; using System.Linq; public partial class mySQLdb : DbContext { public mySQLdb() : base("name=mySQLdb") { } public virtual DbSet<tblDiplomati> tblDiplomati { get; set; } protected override void OnModelCreating(DbModelBuilder modelBuilder) { modelBuilder.Entity<tblDiplomati>() .Property(e => e.Nome) .IsUnicode(false); modelBuilder.Entity<tblDiplomati>() .Property(e => e.Cognome) .IsUnicode(false); } } }
Fatto!
Ora andiamo a usare questo Data Model ad esempio scrivendo una roba del genere lato XAML
<Window x:Class="WpfApplication3.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="MainWindow" Height="350" Width="525"> <Grid> <Grid.RowDefinitions> <RowDefinition Height="50"></RowDefinition> <RowDefinition></RowDefinition> </Grid.RowDefinitions> <StackPanel Orientation="Horizontal"> <Button Width="100" Margin="5" Click="Button_Click">Go</Button> </StackPanel> <DataGrid Name="dgDati" Grid.Row="1"></DataGrid> </Grid> </Window>
e una roba del genere lato C#
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; using System.Data.Entity; namespace WpfApplication3 { /// <summary> /// Logica di interazione per MainWindow.xaml /// </summary> public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); } private void Button_Click(object sender, RoutedEventArgs e) { mySQLdb db = new mySQLdb(); db.tblDiplomati.Load(); dgDati.ItemsSource = db.tblDiplomati.Local; } } }
Provare per credere
3 commenti su “Utilizzare mySQL con Entity Framework”
Ciao, ottimo articolo ti ringrazio.
Io ho provato oggi in data 12/05/2020 poiché gradirei sviluppare un applicativo con MySQL basato su interfaccia grafica WPF.
Ho provato ma a me non funziona!
Ho installato sulla macchina MySQL 8.0, i .NET connector ed il relativo MySQL for Visual Studio.
Ho usato NuGet per l’installazione di MySQL,Data e di MySQL.Data.Entity ed ho seguito tutti i passaggi sino alla costruzione della connessione.
Io a differenza tua volevo lavorare in modalità DBFirst, ossia aggiornando il model attraverso MySQLWorkBech per poi ricaricare il modello,
La connessione di DB pare farla senza problema alcuno, il problema è che poi non mi apre la struttura delle tabelle.
Si chiude e non costruisce nessun modello.
Se provo a farlo DBFirst mi pare accada la medesima cosa.
Non capisco dove ho sbagliato, se puoi aiutarmi o darmi dei riferimenti te ne sarei davvero grato.
Ok, la soluzione sta qui: https://dev.mysql.com/doc/visual-studio/en/visual-studio-application-config.html
Facevo tutto in modo corretto, l’unica cosa che mi mancava era di abilitare l’App all’utilizzo di EF6 con l’apposito strumento presente nel Solution Explorer.
Dopo aver abilitato l’App bisogna ricompilare la soluzione e poi si può tranquillamente procedere all’inserimento di EF6 Code First oppure DB First.
Un saluto, mt
Sei un grande! Grazie