La crucialità dei database relazionali e come usarli facilmente con Microsoft EF Core
comprESSE I: una dose mensile di coding
Nel nostro secondo appuntamento con comprESSE I, la rubrica di ESSE I dedicata al coding, (qui trovi il primo "episodio") vogliamo parlarti di elementi considerati a volte “scontati” ma che non lo sono affatto. Si tratta dei database relazionali e di come utilizzarli in modo pratico e veloce in ambiente Microsoft sfruttando la più recente tecnologia.
Per prima cosa, ti sei mai chiesto perché connettersi a un database relazionale è così importante nel coding?
Noi sì e crediamo per almeno otto ragioni:
-
l’accesso efficiente ai dati grazie a SQL (Structured Query Language), con il quale è possibile recuperare, aggiornare, inserire o eliminare dati in modo rapido e preciso;
Insomma, sebbene esistano tipi di database come i “NoSQL” che possono essere adatti per determinati scenari, i database relazionali rimangono una scelta popolare e fondamentale in molti contesti di sviluppo software perché forniscono una base solida per la realizzazione di applicazioni che richiedono una gestione affidabile, efficiente e sicura dei dati.
Sommario:
- Microsoft Entity Framework Core
- Mettiamoci all’opera: come utilizzarlo?
- Il nostro codice
- Microsoft Entity Framework Core: i prossimi sviluppi
- Conclusioni
1) Microsoft Entity Framework Core
Veniamo ora alla più moderna soluzione offerta da Microsoft per la loro gestione: stiamo parlando di EF Core, per esteso Microsoft Entity Framework Core, un framework di mappatura oggetto-relazione (ORM) open source che consente agli sviluppatori .NET di accedere ai dati relazionali utilizzando oggetti.
In questo articolo cercheremo non solo di illustrartelo, ma anche di guidarti nel suo utilizzo pratico.
Intanto diciamo che EF Core semplifica la gestione dei dati relazionali fornendo un modello di dati object-oriented che può essere utilizzato per rappresentare dati relazionali ed è adatto a una varietà di database relazionali, tra cui SQL Server, MySQL, PostgreSQL e Oracle.
EF Core è progettato per essere leggero e scalabile. Di fatto oggi è una scelta ideale per lo sviluppo di applicazioni web, mobile e desktop.
Quali le caratteristiche e i vantaggi chiave di EF Core?
Sono come minimo cinque:
EF Core è uno strumento potente in grado di semplificare lo sviluppo di applicazioni che accedono ai dati relazionali e può essere utilizzato in vari contesti. Casi tipici possono essere: un’applicazione web che memorizza i dati degli utenti in un database relazionale; un’applicazione mobile che memorizza i dati di un prodotto; un’applicazione desktop che memorizza i dati di un ordine. In tutti i casi, con EF Core è possibile non solo salvare i dati ma anche gestirli attraverso chiamate SQL.
I vantaggi dell’utilizzo di EF Core sono numerosi. Quelli più comuni sono già stati elencati in precedenza in merito all’uso di database relazionali; qui vorremmo porre un focus specifico sui seguenti quattro:
2) Mettiamoci all’opera: come utilizzarlo?
Visto che con questa rubrica vogliamo sporcarci un po’ le mani anche questa volta, abbiamo pensato di realizzare un semplice progetto con Visual Studio Community che sfrutta questo framework per visualizzare degli oggetti contenuti in una tabella di un database SQL Server.
Per distribuire il codice ci avvarremo del nostro repository GitHub: se sei iscritto, ti consigliamo di seguirlo per non perderti le nostre novità su questa importante piattaforma di social coding (argomento a cui, a proposito, abbiamo dedicato anche questo articolo).
Ovviamente, per eseguire il codice, stiamo dando per scontato che tu abbia installato SQL Server, lo abbia configurato per ricevere connessioni in ingresso, abbia creato un utente con i corretti privilegi e caricato alcuni dati all’interno della tabella (generata con il secondo blocco di codice fornito).
Ti ricordiamo che puoi svolgere tutti questi compiti (come abbiamo fatto noi) con l’ottimo SQL Server Management Studio.
3) Il nostro codice
Oltre che a seguire, il codice è disponibile qui sul profilo GitHub di ESSE I.
Codice sorgente in C#:
using System;
using System.Data.SqlTypes;
using System.Linq;
using Microsoft.EntityFrameworkCore;
namespace ConsoleApp
{
class Program
{
static void Main(string[] args)
{
// Crea una stringa di connessione con i parametri necessari per connettersi a SQL Server
// Puoi modificare questi parametri a seconda del tuo server, del tuo database, del tuo utente e della tua password
string connectionString = "Server=127.0.0.1;Database=myDataBase;User Id=myUser;Password=myPassword;TrustServerCertificate=True";
// Crea un'istanza della classe DbContextOptionsBuilder, che serve per configurare le opzioni per il contesto del database
var optionsBuilder = new DbContextOptionsBuilder<MyDbContext>();
// Usa il metodo UseSqlServer per specificare il provider di database e la stringa di connessione
optionsBuilder.UseSqlServer(connectionString);
// Crea un'istanza della classe MyDbContext, che rappresenta il contesto del database, usando le opzioni configurate
using (var context = new MyDbContext(optionsBuilder.Options))
{
// Qui puoi eseguire le operazioni che vuoi sul database, ad esempio query o comandi, usando le classi di entità definite nel contesto
// Per esempio, puoi usare il metodo LINQ ToList per ottenere tutti gli elementi della tabella Prodotti
var prodotti = context.Prodotti.ToList();
// Stampa il numero di elementi ottenuti dalla query
Console.WriteLine("La query ha restituito {0} elementi.", prodotti.Count);
// Stampa i dettagli di ogni elemento ottenuto dalla query
foreach (var prodotto in prodotti)
{
Console.WriteLine("Id: {0}, Nome: {1}, Prezzo: {2}", prodotto.Id, prodotto.Nome, prodotto.Prezzo);
}
Thread.Sleep(10000);
}
}
}
// Definisce la classe MyDbContext, che eredita dalla classe DbContext e rappresenta il contesto del database
public class MyDbContext : DbContext
{
// Definisce il costruttore della classe, che accetta le opzioni per il contesto come parametro e le passa al costruttore base
public MyDbContext(DbContextOptions<MyDbContext> options) : base(options)
{
}
// Definisce la proprietà Prodotti, che rappresenta la tabella Prodotti nel database e usa la classe Prodotto come tipo di entità
public DbSet<Prodotto> Prodotti { get; set; }
}
// Definisce la classe Prodotto, che rappresenta un'entità della tabella Prodotti nel database
public class Prodotto
{
// Definisce la proprietà Id, che rappresenta la chiave primaria della tabella Prodotti
public int Id { get; set; }
// Definisce la proprietà Nome, che rappresenta una colonna della tabella Prodotti
public string Nome { get; set; }
// Definisce la proprietà Prezzo, che rappresenta una colonna della tabella Prodotti
public decimal Prezzo { get; set; }
}
}
Questo codice C# utilizza l’Entity Framework Core per connettersi a un database SQL Server, eseguire una query per ottenere dati dalla tabella “Prodotti” e stampare i risultati. Crediamo, sia un esempio di base di come utilizzare un ORM (Object-Relational Mapping) per interagire con un database relazionale utilizzando C#.
Codice sorgente in SQL Server:
USE [myDataBase]
GO
/****** Object: Table [dbo].[Prodotti] Script Date: 26/09/2023 14:11:56 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Prodotti](
[Id] [int] NOT NULL,
[Nome] [text] NOT NULL,
[Prezzo] [decimal](18, 2) NOT NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO
In generale questo script crea una semplice tabella chiamata “Prodotti” con tre colonne: “Id”, “Nome” e “Prezzo”. La tabella è progettata per contenere informazioni sui prodotti e ciascuna colonna ha restrizioni per garantire l’integrità dei dati. Tieni presente che l’utilizzo del tipo di dati “text” per la colonna “Nome” potrebbe essere problematico in alcune situazioni, poiché i tipi di dati “text” sono deprecati in SQL Server e potrebbero essere sostituiti da altri tipi di dati come “nvarchar” o “varchar”. Assicurati che questa scelta sia adeguata alle tue esigenze specifiche.
4) Microsoft Entity Framework Core: i prossimi sviluppi
Prossimamente, con lo sviluppo del framework .NET (di cui, lo ricordiamo, si aspetta la versione 8, ne abbiamo parlato in questo nostro social post), arriveranno delle belle novità in termini di performance.
Soprattutto il fatto che è disponibile come FOSS (Free Open Source Software) non solo su Windows ma anche su Linux continuerà a renderlo un framework appetibile per quegli sviluppatori che, pur non volendosi allontanare dall’ecosistema Microsoft, sono attratti dal risparmio garantito dalle piattaforme open source.
5) Conclusioni
Anche noi non vediamo l’ora di seguire i prossimi “sviluppi nello sviluppo” (scusaci il gioco di parole!) del software anche nel comparto dei database relazionali. Mentre fanno la spola i già citati “NoSQL” (Not Only SQL) – una categoria di sistemi di gestione dei dati progettati per la memorizzazione e il recupero di dati che non segue il modello tabellare dei database relazionali tradizionali – riteniamo che la strada dei dati relazionali rimanga al momento quella economicamente più percorribile, veloce e popolare.
Tu che ne pensi?
Faccelo sapere contattandoci o lasciando un commento sui nostri social.