Guida Completa a Entity Framework in ASP.NET
Introduzione
Entity Framework (EF) è un Object-Relational Mapper (ORM) per .NET che permette di interagire con un database utilizzando entità (classi) invece di SQL grezzo. Questo consente di scrivere codice più pulito e manutenibile, delegando al framework la gestione delle query SQL. In questa guida completa, esploreremo ogni aspetto di Entity Framework, dalle basi fino alle ottimizzazioni avanzate e l'integrazione con Stored Procedure.
1️⃣ Creazione del Progetto e Configurazione di Entity Framework
Per iniziare, apri Visual Studio e crea un nuovo progetto:
File → New → Project → ASP.NET Web Application (.NET Framework).
Seleziona MVC e clicca su Create.
Aggiungi il pacchetto NuGet per Entity Framework:
Install-Package EntityFramework
Configura il file
Web.config
con la stringa di connessione:
<connectionStrings>
<add name="DatabaseContext" connectionString="Server=localhost;Database=MyAppDB;Trusted_Connection=True;" providerName="System.Data.SqlClient" />
</connectionStrings>
2️⃣ Creazione del Modello di Dati
Con Entity Framework puoi generare il modello di dati usando Code First, Database First o Model First. Qui vedremo l'approccio Code First. Questo metodo consente di creare le entità direttamente nel codice e generare le tabelle nel database.
public class Utente
{
public int Id { get; set; }
public string Nome { get; set; }
public string Email { get; set; }
}
public class DatabaseContext : DbContext
{
public DbSet<Utente> Utenti { get; set; }
}
Dopo aver definito il modello, puoi generare il database tramite migrazioni:
Enable-Migrations
Add-Migration InitialCreate
Update-Database
Le migrazioni permettono di aggiornare la struttura del database mantenendo i dati esistenti. Puoi aggiungere colonne, modificare tipi di dati e applicare modifiche in modo sicuro.
3️⃣ Operazioni CRUD (Create, Read, Update, Delete)
Con Entity Framework, le operazioni CRUD sono estremamente semplici e si integrano perfettamente con LINQ:
// CREATE
using (var context = new DatabaseContext())
{
var utente = new Utente { Nome = "Marco", Email = "marco@example.com" };
context.Utenti.Add(utente);
context.SaveChanges();
}
// READ
using (var context = new DatabaseContext())
{
var utenti = context.Utenti.ToList();
}
// UPDATE
using (var context = new DatabaseContext())
{
var utente = context.Utenti.FirstOrDefault(u => u.Id == 1);
utente.Nome = "Marco Puccio";
context.SaveChanges();
}
// DELETE
using (var context = new DatabaseContext())
{
var utente = context.Utenti.FirstOrDefault(u => u.Id == 1);
context.Utenti.Remove(utente);
context.SaveChanges();
}
Entity Framework tiene traccia dei cambiamenti tramite il Change Tracker, che consente di monitorare le modifiche agli oggetti prima di salvarli nel database.
4️⃣ Lazy Loading, Eager Loading e Explicit Loading
Entity Framework supporta tre modalità di caricamento dei dati correlati:
Lazy Loading: i dati vengono caricati solo quando effettivamente richiesti.
Eager Loading: i dati vengono caricati immediatamente tramite
Include()
.Explicit Loading: i dati vengono caricati su richiesta esplicita dell'utente.
// Lazy Loading
automobile.Modello.ToList();
// Eager Loading
var automobili = context.Automobili.Include(a => a.Modello).ToList();
// Explicit Loading
context.Entry(automobile).Collection(a => a.Modello).Load();
Scegliere il metodo di caricamento corretto migliora notevolmente le performance e riduce le query SQL generate.
5️⃣ Migrazioni Avanzate e Rollback
Le migrazioni avanzate permettono di evolvere il database nel tempo senza perdere dati. Possiamo:
Aggiungere colonne
Modificare tipi di dati
Rinominare tabelle
Esempio di rollback:
Update-Database -TargetMigration:"NomeMigrazione"
Esempio di migrazione:
public partial class AggiuntaColonnaIndirizzo : DbMigration
{
public override void Up()
{
AddColumn("dbo.Utenti", "Indirizzo", c => c.String(nullable: true));
}
public override void Down()
{
DropColumn("dbo.Utenti", "Indirizzo");
}
}