Как удалить таблицы EF Core? Или как убрать все миграции? Или как вызвать `dotnet ef database update 0` из кода пользователя?

Я занимаюсь разработкой веб-приложения и небольшого приложения для командной строки, которое устанавливает основные таблицы ef в БД. Последнее можно сделать, позвонив dbContext.Database.Migrate(); и это работает.

Теперь я хочу предоставить unistall вариант (с этим приложением).

Но как убрать миграции (значит вызвать функциональность dotnet ef database update 0 из моего кода)?

Это может быть не один командный вызов (как это было в случае с dbContext.Database.Migrate();). Но фрагмент с циклом через все миграции в сборке миграций и вызовом 'Downs'.

2 ответа

EF Core предоставляет публично только dbContext.Database.Migrate(); метод расширения, используемый для переноса последней версии. Это упомянуто в разделе " Применение миграций во время выполнения " документации EF Core, которая также содержит следующее

Заметка

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

который дает вам решение, потому что IMigrator интерфейс обеспечивает Migrate прием метода необязательный targetMigration параметр с той же семантикой, что и dotnet ef database update или же Update-Database ПМ команды. Переходя "0" (что является значением Migration.InitialDatabase постоянная) выполнит соответствующую операцию.

Вам понадобятся следующие дополнительные using s:

using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Migrations;

и код так:

var migrator = dbContext.GetService<IMigrator>();
migrator.Migrate(Migration.InitialDatabase);

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

dbContext.GetService<IMigrator>().Migrate(targetMigration);

Используйте константу Migration.InitialDatabase отменить все миграции.

Migration.InitialDatabase

  • Пространство имен: Microsoft.EntityFrameworkCore.Migrations
  • Сборка: Microsoft.EntityFrameworkCore.Relational.dll
  • Описание: идентификатор миграции для пустой базы данных.
  • Декларация: public const string InitialDatabase;

Ссылка: https://github.com/aspnet/EntityFrameworkCore/issues/9968

Другие вопросы по тегам