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 EntityFrameworkConfigura il file
Web.configcon 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-DatabaseLe 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");
    }
}