Benvenuti nella parte 2 della serie API Web ASP.NET Core ed Entity Framework Core! Nel articolo precedente , abbiamo impostato il nostro progetto iniziale e il nostro database. Ora useremo il Impalcatura-DbContext comando per generare automaticamente il codice della classe del modello dalla nostra struttura di database esistente.
Cos'è Scaffold-DbContext
Scaffold-DbContext è uno strumento Entity Framework Core che crea classi di modelli per ogni tabella nel database. Ciò può far risparmiare enormi quantità di tempo poiché non è necessario definire manualmente tutte le classi e le proprietà del modello.
Vantaggi principali
- Sviluppo rapido di app da database esistenti
- Creazione automatica dell'endpoint API CRUD
- Rigenerazione facile quando il database cambia
Lati negativi
- Potenziali problemi di overfetch se i modelli non sono ottimizzati
- Controllo limitato rispetto alle lezioni di codifica manuale
- Gestione più difficile delle relazioni molti-a-molti
Per la creazione rapida di prototipi e MVP, Scaffold-DbContext offre enormi vantaggi in termini di efficienza.
Impostazione del progetto
Garantire quanto segue da Parte 1 prima di continuare:
- Progetto API Web ASP.NET Core creato
- Database SQL Server locale aggiunto con tabelle Customers e Orders di esempio
- Pacchetti Entity Framework Core e Tools installati
Una volta gettate le basi, possiamo iniziare a utilizzare Scaffold-DbContext!
Utilizzo di Scaffold-DbContext
Apri la Console di gestione pacchetti
Il comando Scaffold-DbContext viene eseguito nella finestra della console di gestione pacchetti di Visual Studio:
- Apri VisualStudio
- Vai a Strumenti > Gestione pacchetti NuGet > Console di gestione pacchetti
Sintassi Scaffold-DbContext
Struttura generale dei comandi:
|_+_|Analizzeremo i parametri chiave:
- ConnectionString - Stringa di connessione al database, in genere da appsettings.json
- Fornitore - Provider di dati come Microsoft.EntityFrameworkCore.SqlServer
- Dir.Uscita - Cartella di destinazione del codice classe del modello
- Contesto - Nome per la classe derivata DbContext
- Schemi - Nomi di schemi di database facoltativi da includere
- Tabelle - Tabelle specifiche per cui generare modelli
- Annotazioni dei dati - Includere attributi di convalida nelle proprietà del modello
- Forza - Sovrascrivi i file esistenti
Comandi di esempio
Impalcatura di tutte le tabelle dal database DevDB:
|_+_|Ponteggio solo tabella Clienti:
|_+_|Esecuzione di Scaffold-DbContext
Con la console di gestione pacchetti aperta, impalciamo le tabelle del database nella directory Models.
1. Controllare la stringa di connessione
Dobbiamo fare riferimento alla stringa di connessione definita in appsettings.json. Per convenzione si chiama 'DefaultConnection':
|_+_|2. Eseguire Scaffold-DbContext
Utilizzando la stringa di connessione predefinita, genereremo classi di modello per entrambe le tabelle Customers e Orders nella cartella Models:
|_+_|3. Esplora il codice generato
Dopo alcune elaborazioni, dovresti trovare le classi modello appena generate per Customers e Orders, oltre al codice StoreDbContext!
Revisione del codice per l'impalcatura
Le classi del modello generate automaticamente e DbContext costituiscono la base necessaria per iniziare a utilizzare la funzionalità Entity Framework Core.
Modelli
Punti salienti:
- Un file .cs per tabella come Customer.cs e Order.cs
- Le proprietà corrispondono ai nomi delle colonne e ai tipi di dati
- [Chiave] denota la colonna della chiave primaria
- Le proprietà di navigazione definiscono le relazioni
- Attributi di convalida dei dati inclusi
Classe StoreDbContext
Dettagli chiave:
- Deriva da Microsoft.EntityFrameworkCore.DbContext
- Proprietà DbSet per ogni set di entità come Clienti e Ordini
- OnConfiguring collega il provider di database e la stringa di connessione
- OnModelCreating configura ulteriormente il comportamento di associazione del modello
Questo DbContext è il ponte principale tra il nostro database e le rappresentazioni del modello!
Test dell'API con impalcatura
Il contesto e i modelli del database dovrebbero ora consentire l'abilitazione automatica delle rotte CRUD di base.
Aggiornare il database
Innanzitutto, applica eventuali modifiche al modello al database stesso:
|_+_|Esegui l'API Web
Avviare quindi l'app ASP.NET Core per rendere disponibile l'API. I percorsi predefiniti sono simili a:
- GET /api/Clienti
- OTTIENI /api/Ordini
Possiamo chiamarli da Postman o dal browser per restituire risultati JSON!
Personalizzazione dei modelli
Sebbene Scaffold-DbContext abbia generato un codice iniziale decente, probabilmente avremo bisogno di modificare i modelli per ottenere prestazioni ottimali.
Rimuovi i modelli non utilizzati
L'eliminazione delle classi del modello non necessarie riduce l'indebitamento inutile del contesto:
|_+_|Aggiungi metadati
Decorare i modelli utilizzando gli attributi dello spazio dei nomi System.ComponentModel.DataAnnotations: |_+_|
Configura relazioni
La mappatura esplicita delle relazioni evita i conflitti lungo il percorso:
|_+_|Ulteriori modifiche
Ulteriori personalizzazioni per migliorare il codice dello scaffold:
- Aggiungi costruttori di modelli per l'incapsulamento
- Fare in modo che i modelli implementino le interfacce per il disaccoppiamento
- Sfrutta i modelli di visualizzazione per controllare l'esposizione dei dati
- Integra il modello di repository per l'astrazione
Man mano che l'app si evolve, esegui il refactoring continuo dei modelli per soddisfare le mutevoli esigenze.
Parte 1 Riepilogo
Nell'articolo iniziale, noi:
- Creato il progetto API Web ASP.NET Core
- Aggiunto database SQL Server locale utilizzando Visual Studio
- Pacchetti NuGet Entity Framework Core installati
- Definite tabelle campione di base Clienti e Ordini
- Database seminato con dati di test
Ciò ha gettato le basi per iniziare a utilizzare Entity Framework Core!
Prossimo
Con il contesto del database e i modelli creati tramite scaffolding, successivamente utilizzeremo Entity Framework Core per eseguire l'accesso effettivo ai dati:
- Interrogazione con LINQ
- Caricamento delle entità correlate
- Inserimento, aggiornamento e cancellazione dati
- Transazioni
Spostiamo l'attenzione sull'utilizzo di EF Core per creare il set completo di funzionalità CRUD dell'API Web.