Добавление моделей и контроллеров
В этом разделе вы добавите классы моделей, которые определяют сущности базы данных. Затем вы добавите контроллеры веб-API, которые выполняют операции CRUD с этими сущностями.
Добавление классов моделей
В этом руководстве мы создадим базу данных с помощью подхода Code First к Entity Framework (EF). С помощью Code First вы пишете классы C#, соответствующие таблицам базы данных, и EF создает базу данных. (Дополнительные сведения см. в статье Подходы к разработке Entity Framework.)
Сначала мы определяем объекты предметной области как POCOs (обычные старые объекты CLR). Мы создадим следующие объекты POCOS:
- Автор
- Book
В Обозреватель решений щелкните правой кнопкой мыши папку Models. Выберите Добавить, а затем — Класс. Назовите класс Author
.
Замените весь стандартный код в Файле Author.cs приведенным ниже кодом.
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; }
}
}
Добавьте еще один класс с именем Book
со следующим кодом.
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 будет использовать эти модели для создания таблиц базы данных. Для каждой Id
модели свойство станет столбцом первичного ключа таблицы базы данных.
В классе AuthorId
Book определяет внешний ключ в Author
таблице. (Для простоты я предполагаю, что у каждой книги есть один автор.) Класс book также содержит свойство навигации для связанного Author
объекта . Свойство навигации можно использовать для доступа к связанному Author
в коде. Подробнее о свойствах навигации я говорю в части 4, Обработка отношений сущностей.
Добавление контроллеров веб-API
В этом разделе мы добавим контроллеры веб-API, поддерживающие операции CRUD (создание, чтение, обновление и удаление). Контроллеры будут использовать Entity Framework для взаимодействия с уровнем базы данных.
Сначала можно удалить файл Controllers/ValuesController.cs. Этот файл содержит пример контроллера веб-API, но он не нужен для работы с этим руководством.
Затем выполните сборку проекта. Формирование шаблонов веб-API использует отражение для поиска классов модели, поэтому ему требуется скомпилированная сборка.
В обозревателе решений щелкните правой кнопкой мыши папку Controllers. Выберите Добавить, а затем — Контроллер.
В диалоговом окне Добавление шаблона выберите "Контроллер веб-API 2 с действиями с помощью Entity Framework". Нажмите кнопку Добавить.
В диалоговом окне Добавление контроллера выполните следующие действия.
- В раскрывающемся списке Класс модели выберите
Author
класс . (Если вы не видите его в раскрывающемся списке, убедитесь, что вы создали проект.) - Установите флажок "Использовать действия асинхронного контроллера".
- Оставьте имя контроллера "AuthorsController".
- Нажмите кнопку плюс (+) рядом с элементом Класс контекста данных.
В диалоговом окне Новый контекст данных оставьте имя по умолчанию и нажмите кнопку Добавить.
Нажмите кнопку Добавить , чтобы завершить диалоговое окно Добавление контроллера . Диалоговое окно добавляет в проект два класса:
AuthorsController
определяет контроллер веб-API. Контроллер реализует REST API, который клиенты используют для выполнения операций CRUD со списком авторов.BookServiceContext
управляет объектами сущностей во время выполнения, включая заполнение объектов данными из базы данных, отслеживание изменений и сохранение данных в базе данных. Он наследует отDbContext
.
На этом этапе выполните сборку проекта еще раз. Теперь выполните те же действия, чтобы добавить контроллер API для Book
сущностей. На этот раз выберите Book
для класса модели и существующий BookServiceContext
класс для класса контекста данных. (Не создавайте новый контекст данных.) Нажмите кнопку Добавить , чтобы добавить контроллер.