Для работы с базой данных PostgreSQL в проект необходимо добавить через Nuget пакет Npgsql.EntityFrameworkCore.PostgreSQL:
После установки пакета определим в проекте класс 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
Причем на данный момент название провайдера вводится вручную.
И если все прошло удачно, то EntityFramework Core автоматически сгенерирует все необходимые классы моделей и контекста.