Easy📖Теория1 min

Шаг 15: Миграции EF Core

Создание и применение миграций базы данных: установка dotnet-ef, настройка connection string, генерация SQL из C# моделей

Шаг 15: Миграции EF Core

Миграция -- инструкция по изменению базы данных. EF Core сравнивает C# классы с текущим состоянием БД и генерирует SQL.

Установка инструментов

dotnet tool install --global dotnet-ef

Настройка Connection String

В appsettings.json проекта API:

{
  "ConnectionStrings": {
    "OrderDB": "Server=localhost,1433;Database=OrderManagementDB;User Id=sa;Password=YourPassword123!;TrustServerCertificate=true;"
  }
}

Для Docker SQL Server:

docker run -e 'ACCEPT_EULA=Y' -e 'SA_PASSWORD=YourPassword123!' \
  -p 1433:1433 -d mcr.microsoft.com/mssql/server:2022-latest

Создание миграции

dotnet ef migrations add InitialCreate \
  --project src/OrderManagement.Infrastructure \
  --startup-project src/OrderManagement.API

EF Core создаст папку Migrations с файлами, содержащими CREATE TABLE Orders, CREATE TABLE OrderItems, индексы и внешние ключи.

Применение миграции

dotnet ef database update \
  --project src/OrderManagement.Infrastructure \
  --startup-project src/OrderManagement.API

Создаётся база OrderManagementDB с таблицами Orders и OrderItems.

Полезные команды

# List migrations
dotnet ef migrations list --project src/OrderManagement.Infrastructure \
  --startup-project src/OrderManagement.API

# Remove last migration
dotnet ef migrations remove --project src/OrderManagement.Infrastructure \
  --startup-project src/OrderManagement.API

# Generate SQL script (for production)
dotnet ef migrations script --idempotent --output migration.sql \
  --project src/OrderManagement.Infrastructure \
  --startup-project src/OrderManagement.API

Проверь себя

🧪

Что делает dotnet ef migrations add?

🧪

Что делает флаг --idempotent при генерации SQL-скрипта?

🧪

Зачем указывать --startup-project при создании миграции?