Indice dei contenuti
- 1: Creare un nuovo progetto ASP.NET Core
- 2: Aggiungere Entity Framework Core
- 3: Creare il modello e il contesto
- Passo 4: Configurare il database nel file appsettings.json
- Passo 5: Registrare il DbContext nel file Program.cs
- Passo 6: Creare un Controller
- Passo 7: Creare le viste
- Passo 8: Creare il database
- Passo 9: Eseguire l'applicazione
- Conclusioni
Abbiamo creato questa guida con l'intento di aiutare nuovi sviluppatori e professionisti esperti a familiarizzare con le potenzialità offerte da ASP.NET Core e Entity Framework Core 9. Questo articolo include un progetto demo pratico e dettagliato, progettato per esplorare le nuove funzionalità introdotte in queste tecnologie, fornendo un riferimento utile e concreto per applicazioni reali.
Con l’uscita di Entity Framework Core 9, il framework offre miglioramenti significativi, tra cui il supporto per le collezioni primitive, prestazioni di query ottimizzate e un’integrazione più fluida con il runtime di .NET 9. Queste importanti innovazioni contribuiscono a consolidare la preminenza di ASP.NET Core, che anche nel 2025 si propone come un framework ideale per lo sviluppo di applicazioni web robuste e flessibili: la nostra applicazione di esempio illustra come combinare al meglio le sue capacità con le nuove caratteristiche di EF Core 9.
La guida è stata pensata per essere accessibile sia ai principianti che vogliono scoprire queste tecnologie per la prima volta, sia agli sviluppatori esperti che desiderano aggiornare le loro competenze o comprendere meglio le novità di questa versione. Seguendo questo articolo, sarai in grado di creare un’applicazione completa, comprendere come configurare un progetto e sfruttare al massimo le innovazioni di ASP.NET Core e Entity Framework Core 9.
Nelle sezioni di questo articolo svilupperemo un esempio completo di una applicazione di prova ASP.NET Core 9 ed Entity Framework 9 comprensiva di: configurazione del contesto, creazione di un modello, operazioni CRUD (Create, Read, Update, Delete), e una semplice interfaccia web per interagire con il database.
1: Creare un nuovo progetto ASP.NET Core
Apri il terminale e utilizza il seguente comando per creare un nuovo progetto ASP.NET Core:
1 2 |
dotnet new webapp -n EFCoreDemo cd EFCoreDemo |
2: Aggiungere Entity Framework Core
Installa i pacchetti necessari per Entity Framework Core utilizzando il comando:
1 2 |
dotnet add package Microsoft.EntityFrameworkCore.SqlServer dotnet add package Microsoft.EntityFrameworkCore.Tools |
3: Creare il modello e il contesto
Crea una cartella chiamata Models e aggiungi una classe Product.cs e una classe AppDbContext.cs.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
// Models/Product.cs using System.ComponentModel.DataAnnotations; namespace EFCoreDemo.Models { public class Product { public int Id { get; set; } [Required] public string Name { get; set; } [Range(0.01, 10000)] public decimal Price { get; set; } } } |
1 2 3 4 5 6 7 8 9 10 11 12 |
// Models/AppDbContext.cs using Microsoft.EntityFrameworkCore; namespace EFCoreDemo.Models { public class AppDbContext : DbContext { public AppDbContext(DbContextOptions<AppDbContext> options) : base(options) { } public DbSet<Product> Products { get; set; } } } |
Passo 4: Configurare il database nel file appsettings.json
Aggiungi la stringa di connessione al tuo database SQL Server nel file appsettings.json.
1 2 3 4 5 |
{ "ConnectionStrings": { "DefaultConnection": "Server=(localdb)\\mssqllocaldb;Database=EFCoreDemoDb;Trusted_Connection=True;" } } |
Passo 5: Registrare il DbContext nel file Program.cs
Registra il DbContext nel file Program.cs nel seguente modo:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
using Microsoft.EntityFrameworkCore; using EFCoreDemo.Models; var builder = WebApplication.CreateBuilder(args); // Add services to the container. builder.Services.AddDbContext<AppDbContext>(options => options.UseSqlServer(builder.Configuration.GetConnectionString("DefaultConnection"))); builder.Services.AddControllersWithViews(); var app = builder.Build(); // Configure the HTTP request pipeline. if (app.Environment.IsDevelopment()) { app.UseDeveloperExceptionPage(); } else { app.UseExceptionHandler("/Home/Error"); app.UseHsts(); } app.UseHttpsRedirection(); app.UseStaticFiles(); app.UseRouting(); app.UseAuthorization(); app.MapControllerRoute( name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"); app.Run(); |
Passo 6: Creare un Controller
Crea una cartella chiamata Controllers e aggiungi un controller ProductsController.cs.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 |
// Controllers/ProductsController.cs using Microsoft.AspNetCore.Mvc; using EFCoreDemo.Models; namespace EFCoreDemo.Controllers { public class ProductsController : Controller { private readonly AppDbContext _context; public ProductsController(AppDbContext context) { _context = context; } // GET: Products public IActionResult Index() { var products = _context.Products.ToList(); return View(products); } // GET: Products/Create public IActionResult Create() { return View(); } // POST: Products/Create [HttpPost] [ValidateAntiForgeryToken] public IActionResult Create(Product product) { if (ModelState.IsValid) { _context.Products.Add(product); _context.SaveChanges(); return RedirectToAction(nameof(Index)); } return View(product); } // GET: Products/Edit/5 public IActionResult Edit(int id) { var product = _context.Products.Find(id); if (product == null) return NotFound(); return View(product); } // POST: Products/Edit/5 [HttpPost] [ValidateAntiForgeryToken] public IActionResult Edit(int id, Product product) { if (id != product.Id) return NotFound(); if (ModelState.IsValid) { _context.Update(product); _context.SaveChanges(); return RedirectToAction(nameof(Index)); } return View(product); } // GET: Products/Delete/5 public IActionResult Delete(int id) { var product = _context.Products.Find(id); if (product == null) return NotFound(); return View(product); } // POST: Products/Delete/5 [HttpPost, ActionName("Delete")] [ValidateAntiForgeryToken] public IActionResult DeleteConfirmed(int id) { var product = _context.Products.Find(id); _context.Products.Remove(product); _context.SaveChanges(); return RedirectToAction(nameof(Index)); } } } |
Passo 7: Creare le viste
Crea una cartella chiamata Views/Products e aggiungi le seguenti viste:
Index.cshtml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
<div class="crayon-line" id="urvanov-syntax-highlighter-6795df8c9648a596732665-3"><h1>Products</h1></div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-6795df8c9648a596732665-4"> </div> </td> </tr> } </tbody> </table> |
Create.cshtml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
@model EFCoreDemo.Models.Product <h1>Create Product</h1> <form asp-action="Create"> <div class="form-group"> <label asp-for="Name"></label> <input asp-for="Name" class="form-control" /> <span asp-validation-for="Name" class="text-danger"></span> </div> <div class="form-group"> <label asp-for="Price"></label> <input asp-for="Price" class="form-control" /> <span asp-validation-for="Price" class="text-danger"></span> </div> <button type="submit" class="btn btn-primary">Create</button> </form> |
Edit.cshtml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
@model EFCoreDemo.Models.Product <h1>Edit Product</h1> <form asp-action="Edit"> <input type="hidden" asp-for="Id" /> <div class="form-group"> <label asp-for="Name"></label> <input asp-for="Name" class="form-control" /> <span asp-validation-for="Name" class="text-danger"></span> </div> <div class="form-group"> <label asp-for="Price"></label> <input asp-for="Price" class="form-control" /> <span asp-validation-for="Price" class="text-danger"></span> </div> <button type="submit" class="btn btn-primary">Save</button> </form> |
Delete.cshtml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
@model EFCoreDemo.Models.Product <h1>Delete Product</h1> <h3>Are you sure you want to delete this?</h3> <div> <h4>@Model.Name</h4> <p>Price: @Model.Price</p> </div> <form asp-action="DeleteConfirmed"> <input type="hidden" asp-for="Id" /> <button type="submit" class="btn btn-danger">Delete</button> <a asp-action="Index" class="btn btn-secondary">Cancel</a> </form> |
Passo 8: Creare il database
Esegui le migrazioni per creare il database utilizzando i seguenti comandi:
1 2 |
dotnet ef migrations add InitialCreate dotnet ef database update |
Passo 9: Eseguire l'applicazione
Infine, esegui l'applicazione con il comando:
1 |
dotnet run |
Visita https://localhost:5001/Products nel tuo browser per vedere l'app in azione.
Conclusioni
Questo progetto dimostra le principali funzionalità di Entity Framework Core 9.0, incluse le operazioni CRUD e l'integrazione con un'applicazione ASP.NET Core. Assicurati di avere SQL Server in esecuzione e configurato correttamente per testare il progetto.