API Web ASP.NET Core + Entity Framework Core: Scaffold-DbContext - EP02

Prova Il Nostro Strumento Per Eliminare I Problemi

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:

  1. Apri VisualStudio
  2. 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.

Guarda Anche: