Если какая-то сущность задействована сразу в нескольких DbContext
DbContext будет создавать код в файлах миграций для любых изменений, вносимых в эту сущность. В результате возникает проблема, потому что второй сценарий миграции потерпит неудачу, если изменения уже внесены в базу данных. До выхода версии EF Core 5 единственным решением было ручное редактирование одного из файлов миграций с целью удаления таких изменений.В версии EF Core 5 производный от DbContext
DbContext становиться системой записи для данной сущности. В следующем коде сущность исключается из миграций:protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity
t => t.ExcludeFromMigrations());
}
Команда remove
Команда remove
__EFMigrationsHistory. Если миграция применялась, тогда процесс терпит неудачу. Если же миграция не применялась или была подвергнута откату, то она удаляется, а файл моментального снимка модели обновляется.Команда remove
add, плюс дополнительный параметр force(—f || --force), который обеспечивает выполнение отката последней миграции и ее удаление за один шаг.Команда list
Команда list
DbContext. По умолчанию она выводит список всех миграций и запрашивает базу данных с целью выяснения, были ли они применены. Если миграции не применялись, то они будут помечены как ожидающие. Один из параметров команды list предназначен для передачи специальной строки подключения, а другой позволяет вообще не подключаться к базе данных и просто вывести список миграций (табл. 22.12).Команда script
Команда script
Если миграции не указаны, тогда созданный сценарий станет совокупным итогом всех миграций. В случае предоставления миграций сценарий будет содержать изменения между двумя миграциями (включительно). Каждая миграция помещается внутрь транзакции. Если в базе данных, где запускается команда script
__EFMigrationsHistory нe существует, то она создается. Кроме того, она будет обновляться для соответствия выполненным миграциям. Вот несколько примеров:// Создать сценарий для всех миграций.
dotnet ef migrations script
// Создать сценарий для миграций от начальной до Мапу2Мапу включительно.
dotnet ef migrations script 0 Many2Many
В табл. 22.14 представлены дополнительные параметры. Параметр -о
-i создает идемпотентный сценарий (который содержит проверку, применялась ли уже миграция, и если применялась, то пропускает ее). Параметр --no-transaction отключает добавление транзакций в сценарий.Команды для управления базой данных
Для управления базой данных предназначены две команды, drop
update. Команда drop удаляет базу данных, если она существует, а команда update обновляет базу данных с использованием миграций.Команда drop
Команда drop
OnConfiguring() производного от DbContext класса. С помощью параметра force можно отключить запрос на подтверждение и принудительно закрыть все подключения (табл. 22.15).Команда update
Команда update
--connection <подключение>, позволяющий использовать строку подключения, которая не была сконфигурирована заранее.