Condividi tramite


Aggiungere modelli e controller

Scaricare il progetto completato

In questa sezione verranno aggiunte classi di modello che definiscono le entità di database. Si aggiungeranno quindi controller API Web che eseguono operazioni CRUD su tali entità.

Aggiungere classi di modelli

In questa esercitazione si creerà il database usando l'approccio "Code First" a Entity Framework (EF). Con Code First si scrivono classi C# che corrispondono alle tabelle di database e EF crea il database. Per altre informazioni, vedere Approcci allo sviluppo di Entity Framework.

Per iniziare, definiamo gli oggetti di dominio come oggetti POCO (oggetti CLR semplici). Verranno creati i seguenti POCO:

  • Autore
  • Libro

In Esplora soluzioni fare clic con il pulsante destro del mouse sulla cartella Modelli. Selezionare Aggiungi e quindi Classe. Assegnare alla classe Authoril nome .

Screenshot della cartella Esplora soluzioni che mostra la cartella Models evidenziata in blu e le voci di menu Aggiungi e classe evidenziate in giallo.

Sostituire tutto il codice boilerplate in Author.cs con il codice seguente.

using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;

namespace BookService.Models
{
    public class Author
    {
        public int Id { get; set; }
        [Required]
        public string Name { get; set; }
    }
}

Aggiungere un'altra classe denominata Book, con il codice seguente.

using System.ComponentModel.DataAnnotations;

namespace BookService.Models
{
    public class Book
    {
        public int Id { get; set; }
        [Required]
        public string Title { get; set; }
        public int Year { get; set; }
        public decimal Price { get; set; }
        public string Genre { get; set; }

        // Foreign Key
        public int AuthorId { get; set; }
        // Navigation property
        public Author Author { get; set; }
    }
}

Entity Framework userà questi modelli per creare tabelle di database. Per ogni modello, la Id proprietà diventerà la colonna chiave primaria della tabella di database.

Nella classe Book l'oggetto AuthorId definisce una chiave esterna nella Author tabella. (Per semplicità, presumo che ogni libro abbia un singolo autore. La classe book contiene anche una proprietà di navigazione per l'oggetto correlato Author. È possibile usare la proprietà di navigazione per accedere al codice correlato Author . Ho detto di più sulle proprietà di navigazione nella parte 4, gestione delle relazioni tra entità.

Aggiungere controller API Web

In questa sezione verranno aggiunti controller API Web che supportano operazioni CRUD (creazione, lettura, aggiornamento ed eliminazione). I controller useranno Entity Framework per comunicare con il livello del database.

Prima di tutto, è possibile eliminare i controller/ValuesController.cs file. Questo file contiene un esempio di controller API Web, ma non è necessario per questa esercitazione.

Screenshot della finestra Esplora soluzioni che mostra il file Values Controllers dot c s evidenziato in rosso che indica che deve essere eliminato.

Compilare quindi il progetto. Lo scaffolding dell'API Web usa la reflection per trovare le classi del modello, quindi richiede l'assembly compilato.

In Esplora soluzioni fare clic con il pulsante destro del mouse sulla cartella Controllers. Selezionare Aggiungi e quindi Controller.

Screenshot della finestra Esplora soluzioni con la cartella Controller e le voci di menu Aggiungi e controller evidenziate in blu e giallo.

Nella finestra di dialogo Aggiungi scaffolding, selezionare "Controller Web API 2 con azioni, utilizzando Entity Framework". Fare clic su Aggiungi.

Screenshot della finestra di dialogo Aggiungi scaffolding che mostra il Controller Web API 2 con azioni con l'opzione Entity Framework evidenziata in blu.

Nella finestra di dialogo Aggiungi controller eseguire le operazioni seguenti:

  1. Nell'elenco a discesa Classe modello selezionare la Author classe . Se non lo vedi nell'elenco a discesa, assicurati di aver costruito il progetto.
  2. Selezionare "Use async controller actions" (Usa azioni del controller asincrone).
  3. Lasciare il nome del controller "AuthorsController".
  4. Fare clic sul pulsante "più" (+) accanto alla Classe del contesto dati.

Screenshot della finestra di dialogo Aggiungi controller che mostra il pulsante più cerchiato in rosso e la classe Author selezionata nell'elenco a discesa Classe modello.

Nella finestra di dialogo Nuovo contesto dati lasciare il nome predefinito e fare clic su Aggiungi.

Screenshot della finestra di dialogo Nuovo contesto dati che mostra il nome predefinito nel campo Nuovo tipo di contesto dati.

Fare clic su Aggiungi per completare la finestra di dialogo Aggiungi controller . La finestra di dialogo aggiunge due classi al progetto:

  • AuthorsController definisce un controller API Web. Il controller implementa l'API REST usata dai client per eseguire operazioni CRUD nell'elenco degli autori.
  • BookServiceContext gestisce gli oggetti entità durante l'esecuzione, che include il popolamento di oggetti con dati di un database, il rilevamento delle modifiche e la persistenza dei dati nel database. Eredita da DbContext.

Screenshot della finestra Esplora soluzioni con il file Authors Controller dot c s e il file Book Service Context c s cerchiato in rosso.

A questo punto, compilare di nuovo il progetto. Eseguire ora gli stessi passaggi per aggiungere un controller API per Book le entità. Questa volta, selezionare Book per la classe del modello e selezionare la classe esistente BookServiceContext per la classe del contesto dati. Non creare un nuovo contesto dati. Fare clic su Aggiungi per aggiungere il controller.

Screenshot della finestra Aggiungi controller con la classe modello Book selezionata nell'elenco a discesa Classe modello.