Найти в Дзене
c3n9

Генерация базы данных и создание API-контроллеров в ASP.NET Core

Перед тем как начать, убедитесь, что у вас установлен .NET SDK. Проверить это можно командой: dotnet --version Если .NET SDK не установлен, скачайте и установите его с официального сайта. Перед началом работы установим нужные пакеты NuGet. Они необходимы для взаимодействия с базой данных и генерации моделей: dotnet add package Microsoft.EntityFrameworkCore.Design
dotnet add package Npgsql.EntityFrameworkCore.PostgreSQL Для работы с Entity Framework Core и генерации моделей из базы данных необходимо установить глобальный инструмент dotnet-ef. Выполните следующую команду: dotnet tool install --global dotnet-ef Теперь создадим модели, используя dotnet ef dbcontext scaffold. Данная команда автоматически создаст классы, соответствующие таблицам в базе данных. dotnet ef dbcontext scaffold "Host=0.0.0.0;Username=postgres;Password=password;Database=DataBaseName" Npgsql.EntityFrameworkCore.PostgreSQL --output-dir Models --force Для автоматического создания API-контроллеров необходимо установи
Оглавление

1. Подготовка к работе

Перед тем как начать, убедитесь, что у вас установлен .NET SDK. Проверить это можно командой:

dotnet --version

Если .NET SDK не установлен, скачайте и установите его с официального сайта.

2. Установка необходимых пакетов

Перед началом работы установим нужные пакеты NuGet. Они необходимы для взаимодействия с базой данных и генерации моделей:

dotnet add package Microsoft.EntityFrameworkCore.Design
dotnet add package Npgsql.EntityFrameworkCore.PostgreSQL

Описание пакетов:

  • Microsoft.EntityFrameworkCore.Design – нужен для генерации моделей из базы данных.
  • Npgsql.EntityFrameworkCore.PostgreSQL – драйвер для работы с PostgreSQL.

3. Генерация моделей

Для работы с Entity Framework Core и генерации моделей из базы данных необходимо установить глобальный инструмент dotnet-ef. Выполните следующую команду:

dotnet tool install --global dotnet-ef

Теперь создадим модели, используя dotnet ef dbcontext scaffold. Данная команда автоматически создаст классы, соответствующие таблицам в базе данных.

dotnet ef dbcontext scaffold "Host=0.0.0.0;Username=postgres;Password=password;Database=DataBaseName" Npgsql.EntityFrameworkCore.PostgreSQL --output-dir Models --force

Описание параметров:

  • "Host=0.0.0.0;Username=postgres;Password=password;Database=DataBaseName" – строка подключения к базе данных.
  • Npgsql.EntityFrameworkCore.PostgreSQL – провайдер базы данных.
  • --output-dir Models – указывает, куда сохранять файлы моделей (в папку Models).
  • --force – позволяет перезаписать существующие модели, если они уже есть.

4. Установка инструментов для генерации контроллеров

Для автоматического создания API-контроллеров необходимо установить dotnet-aspnet-codegenerator:

dotnet tool install -g dotnet-aspnet-codegenerator

Также установим дополнительные пакеты:

dotnet add package Microsoft.VisualStudio.Web.CodeGeneration.Design
dotnet add package Microsoft.EntityFrameworkCore.Tools
dotnet add package Microsoft.EntityFrameworkCore.SqlServer

После установки пакетов очень важно собрать проект, чтобы все зависимости использовались нашим проектом.

Описание пакетов:

  • Microsoft.VisualStudio.Web.CodeGeneration.Design – нужен для генерации кода.
  • Microsoft.EntityFrameworkCore.Tools – утилиты для работы с Entity Framework Core.
  • Microsoft.EntityFrameworkCore.SqlServer – драйвер для работы с SQL Server (можно не устанавливать, если используете PostgreSQL).

5. Генерация API-контроллеров

После генерации моделей мы можем создать для них контроллеры с помощью EntityFramework, используя следующую команду:

dotnet aspnet-codegenerator controller -name MyModelController -async -api -m MyModel -dc ApplicationDbContext -outDir Controllers

Однако, выполнение этой команды вручную для каждой модели может занять много времени, особенно если моделей в проекте несколько десятков или сотен. Чтобы упростить этот процесс и автоматизировать генерацию контроллеров для всех моделей в проекте, можно использовать скрипт PowerShell.

Get-ChildItem Models\*.cs | ForEach-Object {
$modelName = $_.BaseName
dotnet aspnet-codegenerator controller -name ${modelName}Controller -async -api -m $modelName -dc ApplicationDbContext -outDir Controllers
}

Пример скрипта для bash:

for file in Models/*.cs; do
modelName=$(basename "$file" .cs)
echo "Generating controller for $modelName"
dotnet aspnet-codegenerator controller -name "${modelName}Controller" -async -api -m "$modelName" -dc ApplicationDbContext -outDir Controllers
done

Описание параметров:

  • -name ${modelName}Controller – имя создаваемого контроллера.
  • -async – добавляет асинхронные методы.
  • -api – создаёт API-контроллер.
  • -m $modelName – указывает, какая модель будет использоваться.
  • -dc ApplicationDbContext – указывает DbContext для работы с базой данных.
  • -outDir Controllers – указывает папку, куда сохранять сгенерированные контроллеры.

6. Запуск приложения

После успешного создания контроллеров можно запустить приложение командой:

dotnet run

Теперь API готово к использованию, и можно тестировать его с помощью Postman или Swagger.

Следуя данной инструкции, вы сможете быстро сгенерировать модели, создать API-контроллеры и запустить веб-приложение с использованием базы данных PostgreSQL в ASP.NET Core.

Мои соцсети

GitHub: https://github.com/c3n9

Habr: https://habr.com/ru/users/c3n9/