La crucialità dei database relazionali e come usarli facilmente con Microsoft EF Core

La crucialità dei database relazionali e come usarli facilmente con Microsoft EF Core

 

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:

  • la persistenza dei dati che rimangono disponibili anche dopo che il software è stato eseguito o chiuso. Questa persistenza è essenziale per conservare informazioni importanti a lungo termine;

  • 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;

  • il mantenimento dell’integrità dei dati grazie a “regole di integrità” che garantiscono la loro coerenza e validità;

  • la condivisione dei dati tra utenti e applicazioni, utile in scenari nei quali è necessario che più utenti lavorino contemporaneamente con gli stessi dati;

  • la struttura dati flessibile tramite tabelle, che offre un modo versatile di organizzare e mettere in relazione i dati tra loro consentendone una modellazione più precisa e adattabile alle esigenze dell’applicazione;

  • la sicurezza dei dati con controlli di accesso basati su ruoli e permessi: ciò permette di proteggere i dati sensibili e limitare l’accesso solo agli utenti autorizzati;

  • la scalabilità per gestire crescenti carichi di lavoro grazie a tecnologie e approcci che consentono di distribuire database su cluster di server o di utilizzare il cloud per aumentare le prestazioni e la capacità quando necessario;

  • la consistenza transazionale per operazioni complesse, cruciale in applicazioni finanziarie o in qualsiasi contesto in cui è necessario che le operazioni siano atomiche e coerenti.

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:

  1. Microsoft Entity Framework Core
  2. Mettiamoci all’opera: come utilizzarlo?
  3. Il nostro codice
  4. Microsoft Entity Framework Core: i prossimi sviluppi
  5. 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:

  • mappatura automatica: EF Core mappa automaticamente le entità .NET nelle tabelle del database, eliminando la necessità per gli sviluppatori di scrivere codice di mapping personalizzato;

  • querying: EF Core fornisce un set di API di query che consente agli sviluppatori di eseguire query sui dati relazionali in modo naturale e conciso;

  • manipolazione dei dati: EF Core fornisce un set di API che permette agli sviluppatori di inserire, modificare ed eliminare dati relazionali in modo efficiente;

  • relazioni: EF Core consente agli sviluppatori di definire relazioni tra entità .NET, rendendo più facile gestire i dati relazionali complessi;

  • migrations: EF Core fornisce un meccanismo per applicare le modifiche al modello di dati, rendendo più facile mantenere le applicazioni aggiornate.

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:

  • semplicità: EF Core semplifica la gestione dei dati relazionali fornendo un modello di dati object-oriented che può essere utilizzato per rappresentare dati relazionali;

  • efficienza: EF Core è progettato per essere efficiente, sia in termini di prestazioni che di memoria;

  • portabilità: EF Core può essere utilizzato con diverse tipologie di database relazionali, rendendolo una scelta ideale per lo sviluppo di applicazioni multipiattaforma;

  • scalabilità: EF Core è progettato per essere scalabile, il che lo rende una scelta ideale per applicazioni di grandi dimensioni.

 

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.

 

(Foto: Pexels e Pixabay)

Newsletter

Desidero iscrivermi alla newsletter periodica del blog con articoli informativi su software, soluzioni ITC e novità dal mondo ESSE I. Potrai cancellarti quando lo desideri nel pieno rispetto della Privacy Policy .

Codice Anti Spam

Riportare nel box sottostante "Codice di verifica", il codice alfanumerico che trovi a fianco

NEWSLETTER

Iscriviti alla newsletter periodica del blog con articoli informativi su software, soluzioni ITC e novità dal mondo ESSE I.

Non registreremo la tua email in alcun modo fino a quando non avrai accettato le condizioni nel form successivo.

RIMANIAMO IN CONTATTO
Vai al FORM
Seguici sui SOCIAL