PostgreSQL

Последнее обновление: 22.11.2021

Для работы с базой данных PostgreSQL в проект необходимо добавить через Nuget пакет Npgsql.EntityFrameworkCore.PostgreSQL:

PostgreSQL в Entity Framework Core

После установки пакета определим в проекте класс User:

public class User
{
	public int Id { get; set; }
	public string? Name { get; set; }
	public int Age { get; set; }
}

И также определим класс контекста данных:

using Microsoft.EntityFrameworkCore;

public class ApplicationContext : DbContext
{
    public DbSet<User> Users { get; set; } = null!;

    public ApplicationContext()
    {
        Database.EnsureCreated();
    }
    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        optionsBuilder.UseNpgsql("Host=localhost;Port=5432;Database=usersdb;Username=postgres;Password=пароль_от_postgres");
    }
}

Для установки подключения к базе данных в методе OnConfiguring вызывается метод UseNpgsql(), в который передается строка подключения. Строка подключения содержит адрес сервера (параметр Host), порт (Port), название базы данных на сервере (Database), имя пользователя в рамках сервера PostgreSQL (Username) и его пароль (Password). В зависимости от настроек сервера PostgreSQL параметры могут отличаться.

Теперь определим в файле Program.cs простейшую программу по добавлению и извлечению объектов из базы данных:

// добавление данных
using (ApplicationContext db = new ApplicationContext())
{
    // создаем два объекта User
    User user1 = new User { Name = "Tom", Age = 33 };
    User user2 = new User { Name = "Alice", Age = 26 };

    // добавляем их в бд
    db.Users.AddRange(user1, user2);
    db.SaveChanges();
}
// получение данных
using (ApplicationContext db = new ApplicationContext())
{
    // получаем объекты из бд и выводим на консоль
    var users = db.Users.ToList();
    Console.WriteLine("Users list:");
    foreach (User u in users)
    {
        Console.WriteLine($"{u.Id}.{u.Name} - {u.Age}");
    }
}

Консольный вывод:

Users list:
1.Tom - 33
2.Alice - 26

Миграции

Выше для создания базы данных использовался метод Database.EnsureCreated. Теперь изменим класс контекста данных - уберем вызов Database.EnsureCreated и изменим название база данных:

public class ApplicationContext : DbContext
{
    public DbSet<User> Users { get; set; } = null!;

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        optionsBuilder.UseNpgsql("Host=localhost;Port=5432;Database=usersdb2;Username=postgres;Password=123456789");
    }
}

Посмотрим теперь, как использовать миграции. Прежде всего нам надо добавить в проект через Nuget пакет Microsoft.EntityFrameworkCore.Tools для поддержки миграций.

Для создания базы данных создадим и выполним миграции. Для этого в окне Package Manager Console введем команду:

Add-Migration Initial

После генерации файла миграции для создания базы данных выполним команду:

Update-Database

После этого на сервере будет создана база данных, и мы сможем с ней взаимодействовать.

Подключение к существующей базе данных

Для подключения к существующей базе данных в PostgreSQL необходимо в окне Package Manager Console выполнить команду Scaffold-DbContext, которой передается строка подключения и название провайдера, то есть Npgsql.EntityFrameworkCore.PostgreSQL (для выполнения этой команды тоже необходим пакет Microsoft.EntityFrameworkCore.Tools). Сначала вводится команда Scaffold-DbContext и строка подключения:

Scaffold-DbContext "Host=localhost;Port=5432;Database=usersdb;Username=postgres;Password=123456789"

Затем в консоли появится слово Provider, после которого надо будет ввести название провайдера, то есть

Npgsql.EntityFrameworkCore.PostgreSQL

Причем на данный момент название провайдера вводится вручную.

миграции PostgreSQL в Entity Framework Core

И если все прошло удачно, то EntityFramework Core автоматически сгенерирует все необходимые классы моделей и контекста.

Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850