In questo articolo vediamo come realizzare una semplice applicazioni di tipo “Console” in .Net 6 con il linguaggio di programmazione C# per le operazioni su un database Sqlite da far girare in un sistema operativo Raspberry, schede che permettono ambiti IOT, ossia internet delle Cose.
Tramite l’ambiente di sviluppo Visual Studio 2022 community verrà creata una semplice applicazione per le operazioni CRUD, lettura, inserimento, modifica e cancellazione dei dati, utilizzando il database multipiattaforma Sqlite che non richiede nessuna installazione.
L'applicazione visualizzerà i messaggi a video, il tutto sarà come riportato qui di seguito.
Creazione del progetto
Si crea un nuovo progetto di tipo “App Console” che permette l’esecuzione di vari sistemi operativi tra cui Raspberry. Selezionare come linguaggio di programmazione C#, piattaforma tutte, e come modello tipo Console, il tutto come mostrato in figura 1.
Figura 1 – Il modello di progetto
Dopo aver selezionato il modello di progetto, fare click sul pulsante avanti, e nella finestra nel quale permette la selezione del Framework, selezioniamo tra quelle proposte la versione “.Net 6.0 (supporto a lungo termine), il tutto come mostrato in figura 2.
Figura 2 – La scelta della versione del Framework.
A questo punto facciamo click sul pulsante “Crea”.
Per gestire il database Sqlite utilizzeremo Entity Framework per questo tipo di database.
Dalla voce di menu “Strumenti” selezioniamo “Gestione dei pacchetti Nuget “ e poi console di della gestione dei pacchetti.
Nella finestra che viene aperta, eseguiamo il comando seguente.
Install-Package Microsoft.EntityFrameworkCore.Sqlite
Che permetterà di aggiungere al nostro progetto il riferimento di Entity Framework per la gestione dei database di tipo Sqlite.
Le operazioni di configurazione del programma sono terminate, ora non resta che scrivere il codice.
Stesura del codice
Dopo aver aggiunto i riferimenti di Entity Framework per Sqlite, dobbiamo scrivere il codice per la gestione dei dati, inizialmente creando le classi con il quale andremo a mappare le tabelle e gestire la connessione con il database.
Nel nostro esempio utilizzeremo una sola tabella, al quale andremo a creare una classe.
Nella finestra di “Esplora soluzione”, facciamo tasto destro sul nome del progetto e selezioniamo al voce “Aggiungi” e poi la sotto voce “Classe”.
Nella finestra che viene aperta, impostiamo il nome della classe, che sarà quella per la gestione del database, come classe, impostiamo il valore “DatiContext” o altro nome secondo il gradimento del lettore, che sarà quella per gestire i dati bel tabella.
Al di fuori di questa classe, ne dobbiamo creare una, che sarà quella che rappresenterà una ipotetica tabella, per ogni tabella che si intende avere nel database, andrà creata la rispettiva classe al di fuori di questa appena creata.
Si crea un nuova classe denominata “Arnia”, la quale avrà una proprietà di tipo “int” che è il campo contatore chiave, una proprietà di tipo “DateTime” per l’aggiornamento del record, e tre proprietà di tipo string, per la gestione dei dati.
Qui di seguito il frammento di codice per la classe appena creata.
C#
public class Arnia
{
public int Id { get; set; }
public string Temperatura { get; set; }
public string Umidita { get; set; }
public DateTime? DataRilevamento { get; set; }
}
Ritornando nella classe precedente, quella denominata “DatiContext”, scriviamo una proprietà che rappresenta la classe di tipo pubblica ed un'altra di tipo string con visibilità privata dove andremo ad inserire il percorso e nome del database.
Di seguito le dichiarazioni delle suddette operazioni.
C#
public class DatiContext : DbContext
{
public Arnia arnia { get; set; }
private string percorso { get; set; }
}
Nel costruttore andremo ad impostare la proprietà privata denominata “percorso” con il percorso e nome del database, che si troverà nella stessa cartella dove si troverà il programma che verrà eseguito.
Oltre al costruttore, dobbiamo effettuare l ovveride del metodo “onconfiguring” , di seguito il codice completo della classe DatiContext e delle suddette operazioni.
C#
public class DatiContext : DbContext
{
public DbSet<Arnia> arnia { get; set; }
private string percorso { get; set; }
public DatiContext()
{
percorso = Environment.CurrentDirectory + "\\Dati.db";
}
protected override void OnConfiguring(DbContextOptionsBuilder options)
=> options.UseSqlite($"Data Source={percorso}");
}
Terminata questa operazione, dobbiamo creare il database, questo avviene tramite i comandi da eseguire in console di gestione dei pacchetti, di seguito il comando da eseguire nella console.
Install-Package Microsoft.EntityFrameworkCore.Tools
Successivamente, occorre eseguire il comando che permetterà di creare le classi per poter creare il database e la tabella, secondo quando riportato nella classe DatiContext, di seguito il comando da eseguire sempre nella finestra della gestione dei pacchetti.
Add-Migration InitialCreate
Ultima esecuzione, il comando per creare il database e tabelle su quanto riportato nelle tabelle.
Eseguire il seguente comando.
Update-Database
Ritornando nella classe “Programm” che è il punto in cui viene eseguita l’applicazione, scriviamo il codice per la lettura dei dati, verificando quanti record sono presenti e visualizzarli nella console.
La prima operazione sul database che andremo a scrivere è la lettura dei dati.
Di seguito si riporta il frammento di codice per visualizzare a video il totale dei record presenti nella tabella.
C#
using (var dati = new DatiContext())
{
var record = dati.arnia;
Console.WriteLine("Sono presenti record: " + record.ToList().Count);
}
Per chi conoscere Linq ed Entity Framework non avrà difficoltà a comprendere il codice, nel quale tramite il metodo “ToList” vengono estrapolati tutti i record e tramite la proprietà “Count” si visualizza il totale.
Le operazioni di inserimento è molto semplice, si crea un oggetto della classe che rappresenta la tabella, nel nostro caso “arnia”, si valorizzano le proprietà e tramite l’oggetto del contesto lo si aggiunge all’insieme della classe “arnia” tramite il metodo “Add” e poi tramite il metodo “SaveChanges” si inserisce il record.
Di seguito la dichiarazione delle suddette operazioni.
C#
Console.WriteLine("Inserimento Dati");
using (var dati = new DatiContext())
{
Arnia arnia = new Arnia
{
DataRilevamento = DateTime.Now,
Temperatura = "10",
Umidita = "4"
};
dati.arnia.Add(arnia);
dati.SaveChanges();
var record = dati.arnia;
Console.WriteLine("Sono presenti record: " + record.ToList().Count);
}
Altra operazione sui dati, è quella della modifica, che selezionando il record di proprio interesse effettua l’aggiornamento tramite il metodo “SaveChanges” del contesto.
Di seguito il frammento di codice delle suddetto operazioni.
C#
Console.WriteLine("Modifica Dati");
using (var dati = new DatiContext())
{
var recordSelezionato = dati.arnia.ToList()[0];
recordSelezionato.Temperatura = "88";
recordSelezionato.Umidita = "77";
dati.SaveChanges();
Console.WriteLine("Record modificato Temperatura: " + dati.arnia.ToList()[0].Temperatura + " Umidità: " + dati.arnia.ToList()[0].Umidita);
var record = dati.arnia;
}
L’ultima operazione sui dati che vedremo è la cancellazione, con la quale eliminiamo il primo record della lista utilizzando il metodo “remove” dell’oggetto Arnia, e salvando il tutto tramite il metodo “SaveChanges” della classe del contesto.
Di seguito l’esempio di codice delle suddette operazioni.
C#
Console.WriteLine("Cancellazione Dati");
using (var dati = new DatiContext())
{
Console.WriteLine("Sono presenti record: " + record.ToList().Count);
var recordSelezionato = dati.arnia.ToList()[0];
dati.arnia.Remove(recordSelezionato);
dati.SaveChanges();
var record = dati.arnia;
Console.WriteLine("Sono presenti record: " + record.ToList().Count);
}
Pubblicazione
Ora non resta che carica tutta la cartella contenente i vari file in raspberry ed eseguire tramite il comando.
Posizionarsi nella cartella superiore di dove si trova la dll del nostro progetto, e tramite la console eseguire il seguente comando.
Ricordiamoci di mettere il database nello stesso percorso di dove si trova la nostra applicazione, altrimenti verrà generato un errore che dice che la tabella non esiste, il tutto come mostrato in figura 3.
Figura 3 - L'errore perchè non trova il database
Se invece è tutto corretto, avremo il risultato come mostrato in figura 4.
Figura 4 - Il risultato dell'applicazione in esecuzione
Conclusioni
L’articolo ha voluto fornire una panoramica completa e molto semplice sulle operazioni che si possono effettuare con una base dati di tipo Sqlite. La scelta di questo database è per la sua portabilità che si può utilizzare in vari contesti, dal sistema operativo Raspberry a Windows, senza problemi e senza aggiunte dei file.
L’articolo ha introdotto il lettore all’utilizzo di Entity Framework nella gestione dei dati, nelle operazioni più comuni, quali lettura, scrittura, modifica e cancellazione dei dati, ma soprattutto come dotare progetti di tipo Internet delle Cose (IOT) con una base dati.
L’esempio di questo articolo può essere utilizzato come gestione dei dati in apicoltura nel salvare i dati dei vari sensori, in maniera molto semplice ed introduttiva.
Sul sito Kubi https://www.kubii.it/ è possibile acquistare la scheda Raspberry o altri accessori per questa scheda innovativa a basso costo su Raspberry.