Ajouter des modèles et des contrôleurs

Télécharger le projet terminé

Dans cette section, vous allez ajouter des classes de modèle qui définissent les entités de base de données. Ensuite, vous allez ajouter des contrôleurs d’API web qui effectuent des opérations CRUD sur ces entités.

Ajouter des classes de modèle

Dans ce tutoriel, nous allons créer la base de données à l’aide de l’approche « Code First » d’Entity Framework (EF). Avec Code First, vous écrivez des classes C# qui correspondent à des tables de base de données, et EF crée la base de données. (Pour plus d’informations, consultez Approches de développement d’Entity Framework.)

Nous commençons par définir nos objets de domaine en tant que POC (objets CLR simples). Nous allons créer les POCO suivants :

  • Auteur
  • Book

Dans Explorateur de solutions, cliquez avec le bouton droit sur le dossier Modèles. Sélectionnez Ajouter, puis Classe. Nommez la classe Author.

Capture d’écran du dossier Explorateur de solutions montrant le dossier Modèles mis en surbrillance en bleu et les éléments de menu Ajouter et Classe mis en surbrillance en jaune.

Remplacez tout le code réutilisable dans Author.cs par le code suivant.

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; }
    }
}

Ajoutez une autre classe nommée Book, avec le code suivant.

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 utilisera ces modèles pour créer des tables de base de données. Pour chaque modèle, la Id propriété devient la colonne clé primaire de la table de base de données.

Dans la classe Book, le AuthorId définit une clé étrangère dans la Author table. (Par souci de simplicité, je suppose que chaque livre a un seul auteur.) La classe book contient également une propriété de navigation vers le associé Author. Vous pouvez utiliser la propriété de navigation pour accéder au code associé Author . J’en dirai plus sur les propriétés de navigation dans la partie 4, Gestion des relations d’entité.

Ajouter des contrôleurs d’API web

Dans cette section, nous allons ajouter des contrôleurs d’API web qui prennent en charge les opérations CRUD (créer, lire, mettre à jour et supprimer). Les contrôleurs utilisent Entity Framework pour communiquer avec la couche de base de données.

Tout d’abord, vous pouvez supprimer le fichier Controllers/ValuesController.cs. Ce fichier contient un exemple de contrôleur d’API web, mais vous n’en avez pas besoin pour ce tutoriel.

Capture d’écran de la fenêtre Explorateur de solutions montrant le fichier points c s des contrôleurs de valeurs mis en évidence en rouge indiquant qu’il doit être supprimé.

Ensuite, générez le projet. La structure de l’API web utilise la réflexion pour rechercher les classes de modèle. Elle a donc besoin de l’assembly compilé.

Dans l’Explorateur de solutions, cliquez avec le bouton droit sur le dossier Contrôleurs. Sélectionnez Ajouter, puis contrôleur.

Capture d’écran de la fenêtre Explorateur de solutions avec le dossier Contrôleurs et les éléments de menu Ajouter et Contrôleur mis en évidence en bleu et jaune.

Dans la boîte de dialogue Ajouter une structure , sélectionnez « Contrôleur d’API web 2 avec actions, à l’aide d’Entity Framework ». Cliquez sur Add.

Capture d’écran de la boîte de dialogue Ajouter une structure montrant le contrôleur Web A P I 2 avec des actions à l’aide de l’option Entity Framework mises en évidence en bleu.

Dans la boîte de dialogue Ajouter un contrôleur , procédez comme suit :

  1. Dans la liste déroulante Classe de modèle , sélectionnez la Author classe . (Si vous ne le voyez pas dans la liste déroulante, assurez-vous que vous avez créé le projet.)
  2. Cochez « Utiliser des actions de contrôleur asynchrones ».
  3. Laissez le nom du contrôleur « AuthorsController ».
  4. Cliquez sur le bouton plus (+) en regard de Classe de contexte de données.

Capture d’écran de la boîte de dialogue Ajouter un contrôleur montrant le bouton plus cerclé en rouge et la classe Author sélectionnée dans la liste déroulante Classe model.

Dans la boîte de dialogue Nouveau contexte de données , conservez le nom par défaut, puis cliquez sur Ajouter.

Capture d’écran de la boîte de dialogue Nouveau contexte de données montrant le nom par défaut dans le champ Nouveau type de contexte de données.

Cliquez sur Ajouter pour terminer la boîte de dialogue Ajouter un contrôleur . La boîte de dialogue ajoute deux classes à votre projet :

  • AuthorsController définit un contrôleur d’API web. Le contrôleur implémente l’API REST que les clients utilisent pour effectuer des opérations CRUD sur la liste des auteurs.
  • BookServiceContext gère les objets d’entité pendant l’exécution, ce qui inclut le remplissage des objets avec les données d’une base de données, le suivi des modifications et la persistance des données dans la base de données. Hérite de DbContext.

Capture d’écran de la fenêtre Explorateur de solutions avec le fichier point c s du contrôleur d’auteurs et le fichier point c s du contexte du service de livre cerclé en rouge.

À ce stade, générez à nouveau le projet. Suivez maintenant les mêmes étapes pour ajouter un contrôleur d’API pour les Book entités. Cette fois, sélectionnez Book pour la classe de modèle, puis sélectionnez la classe existante BookServiceContext pour la classe de contexte de données. (Ne créez pas de contexte de données.) Cliquez sur Ajouter pour ajouter le contrôleur.

Capture d’écran de la fenêtre Ajouter un contrôleur avec la classe de modèle Book sélectionnée dans le menu déroulant Classe de modèle.