Бекенд на C# Web Api

To Kaiten

Создание и конфигурация базы данных

Практически в любом Web Api приложении требуется хранилище данных — база данных. В базе данных хранятся все необходимые данные нашего сервиса, а сам сервис постоянно обращается к базе данных при поступлении запроса от клиента.

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

Для примера будем использовать базу данных PostgreSQL. Для работы с базой данных нужно установить следующие пакеты в NuGet (пкм по Solution —> Manage NuGet Package for Solution…):

Microsoft.EntityFrameworkCore.Design

Npgsql.EntityFrameworkCore.PostgreSQL

Обязательно устанавливайте пакеты одинаковых версий, иначе могут возникнуть проблемы или ошибки.

Создание модели

Таблицы для базы данных описываются обычным классом. В этом классе не должно быть ничего кроме свойств с публичным геттером и сеттером. Эти свойства описывают колонки в таблице. Также класс обязательно должен иметь атрибут [Table("table_name")].

[Table("player_profiles")]
public class PlayerProfiles
{
    public string player_id { get; set; }

    public string name { get; set; }

    public char gender {  get; set; }

    public DateTime created_at { get; set; }
}

Выше приведен пример описания таблицы с названием player_profiles с 4 колонками.

Создание базы данных

Для создания представления базы данных создаем еще один класс, наследующий DbContext. В этом классе обязательно должен быть конструктор, передающий базовому классу DbContextOptions.

Этот класс содержит в себе набор DbSet<T>, каждый из которых представляет собой одну таблицу в базе данных. DbSet<T> содержит методы для работы с таблицей (добавление, удаление, обновление записи и т.д.).

using Microsoft.EntityFrameworkCore;

public class RepositoryContext : DbContext
{
    public RepositoryContext(DbContextOptions options)
        : base(options)
    { }

    public DbSet<PlayerProfile>? PlayerProfiles { get; set; }
    public DbSet<...>? ... { get; set; }
}

Настройка строки подключения

Следующим шагом необходимо настроить строку подключения к БД. Для этого открываем файл appsettings.json и добавляем в него раздел "PostgresqlConnection".

{
  "𝐏𝐨𝐬𝐭𝐠𝐫𝐞𝐬𝐪𝐥𝐂𝐨𝐧𝐧𝐞𝐜𝐭𝐢𝐨𝐧": {
    "𝐂𝐨𝐧𝐧𝐞𝐜𝐭𝐢𝐨𝐧𝐒𝐭𝐫𝐢𝐧𝐠": "𝐒𝐞𝐫𝐯𝐞𝐫=𝐩𝐨𝐬𝐭𝐠𝐫𝐞𝐬; 𝐇𝐨𝐬𝐭=𝐩𝐨𝐬𝐭𝐠𝐫𝐞𝐬_𝐝𝐛; 𝐏𝐨𝐫𝐭=𝟓𝟒𝟑𝟐; 𝐔𝐬𝐞𝐫 𝐢𝐝=𝐚𝐠𝐚𝐯𝐚; 𝐏𝐚𝐬𝐬𝐰𝐨𝐫𝐝=𝐬𝐨𝐦𝐞𝐬𝐭𝐫𝐨𝐧𝐠𝐩𝐚𝐬𝐬𝐰𝐨𝐫𝐝; 𝐝𝐚𝐭𝐚𝐛𝐚𝐬𝐞=𝐝𝐞𝐦𝐨-𝐰𝐞𝐛𝐚𝐩𝐢;"
  },
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft.AspNetCore": "Warning"
    }
  },
  "AllowedHosts": "*"
}
  • Server — при использование PostgreSql значение server всегда будет postgres.

  • Host — может быть localhost либо ip конкретного хоста. Поскольку для развертывания сервиса мы будем использовать docker, то тут указано название сервиса бд, который будет создан в docker'е. Подробнее будет описано дальше.

  • Port — по умолчанию 5432. Можно использовать и другие порты при необходимости.

  • User id — id пользователя, которое требуется для входа в БД.

  • Password — пароль для входа в БД.

  • database — имя базы данных, в которой будет созданы все схемы и модели.

Регистрация DbContext в DI контейнере

Последним шагом нужно зарегистрировать БД в DI контейнере внутри Program. Это делается с помощью кода, приведенного ниже.

var connectionString = config["PostgresqlConnection:ConnectionString"];
services.AddDbContext<RepositoryContext>(options => options.UseNpgsql(connectionString));

Как упоминалось ранее, класс Program должен быть максимально чистым, поэтому этот код следует вынести в метод расширения.


Автор документа: Артём Ветик