EF провайдеры баз данных - PostgreSQL
Для работы с базой данных PostgreSQL создадим новый консольный проект .NET Core. Для работы с этой СУБД вместо с Entity Framework Core в проект необходимо добавить через 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;
namespace HelloApp
{
public class ApplicationContext : DbContext
{
public DbSet<User> Users { get; set; }
public ApplicationContext()
{
Database.EnsureCreated();
}
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseNpgsql("Host=localhost;Port=5433;Database=usersdb;Username=postgres;Password=здесь_указывается_пароль_от_postgres");
}
}
}
Для установки подключения к базе данных в методе OnConfiguring вызывается метод UseNpgsql(), в который передается строка подключения. Строка подключения содержит адрес сервера (параметр Host), порт (Port), название базы данных на сервере (Database), имя пользователя в рамках сервера PostgreSQL (Username) и его пароль (Password). В зависимости от настроек сервера PostgreSQL параметры могут отличаться.
Теперь определим в файле Program.cs простейшую программу по добавлению и извлечению объектов из базы данных:
using System;
using System.Linq;
namespace HelloApp
{
class Program
{
static void Main(string[] args)
{
// добавление данных
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; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseNpgsql("Host=localhost;Port=5433;Database=usersdb2;Username=postgres;Password=password");
}
}
Посмотрим теперь, как использовать миграции. Прежде всего нам надо добавить в проект через 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=password"
Затем в консоли появится слово Provider, после которого надо будет ввести название провайдера, то есть
Npgsql.EntityFrameworkCore.PostgreSQL
Причем на данный момент название провайдера вводится вручную.
И если все прошло удачно, то EntityFramework Core автоматически сгенерирует все необходимые классы моделей и контекста.
Только полноправные пользователи могут оставлять комментарии. Аутентифицируйтесь пожалуйста, используя сервисы.