Aggiungere modelli e controller

Scaricare il progetto completato

In questa sezione verranno aggiunte classi modello che definiscono le entità del 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# corrispondenti alle tabelle di database e EF crea il database. Per altre informazioni, vedere Approcci per lo sviluppo di Entity Framework.

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

  • Autore
  • Book

In Esplora soluzioni fare clic con il pulsante destro del mouse sulla cartella Modelli. Selezionare Aggiungi e quindi Classe. Denominare la classe Author.

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 utilizzare la proprietà di navigazione per accedere all'oggetto correlato Author nel codice. Dico 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 le operazioni CRUD (creare, leggere, aggiornare ed eliminare). I controller useranno Entity Framework per comunicare con il livello del database.

In primo luogo, è possibile eliminare il file Controllers/ValuesController.cs. Questo file contiene un controller API Web di esempio, 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 sulla cartella Controller. 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 "Web API 2 Controller with actions, using Entity Framework". Scegliere Aggiungi.

Screenshot della finestra di dialogo Aggiungi scaffolding che mostra l'opzione Web A P I 2 Controller con azioni con 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 viene visualizzato nell'elenco a discesa, assicurarsi di aver compilato il progetto.
  2. Selezionare "Use async controller actions" (Usa azioni del controller asincrono).
  3. Lasciare il nome del controller "AuthorsController".
  4. Fare clic sul pulsante più (+) accanto a Classe contesto dati.

Screenshot della finestra di dialogo Aggiungi controller che mostra il pulsante più 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 la fase di esecuzione, inclusi 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 dot 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 Book model selezionata nel menu a discesa Classe modello.