Как удалить таблицы 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