Я использую EFCore (недавно перенесенный из EF) для создания БД с кодом и кодированных миграций. EFCore обновляет моментальный снимок модели контекста всякий раз, когда я создаю новую миграцию. Поэтому, когда я создаю новую БД с нуля, используя
using (var db = new AudmDatabaseContext())
{
if (!db.Database.GetService<Microsoft.EntityFrameworkCore.Storage.IRelationalDatabaseCreator>().Exists())
{
db.Database.EnsureCreated();
}
}
, у меня есть текущая структура БД. Однако, когда у меня есть существующая система, мне нужно запустить миграцию
using (var db = new AudmDatabaseContext())
{
if (db.Database.GetService<Microsoft.EntityFrameworkCore.Storage.IRelationalDatabaseCreator>().Exists())
{
var pendingMigrations = db.Database.GetPendingMigrations();
if (pendingMigrations.Count() > 0)
{
db.Database.Migrate();
}
}
}
}
Теперь представьте, что я создал новую БД, используя мой код создания БД. Затем, в какой-то момент, я меняю схему БД, поэтому мне нужно запустить миграцию. Но когда я делаю это, я получаю все миграции как ожидающие, и мигратор пытается внести изменения в схему БД, которая уже была сделана - что, очевидно, не работает. (обратите внимание, что моя первоначальная миграция закомментировала весь код, так как в противном случае он снова создал бы всю БД, но это уже делается с помощью db.Database.EnsureCreated ())
Так какой здесь рекомендуемый подход? Мне нужно иметь возможность создавать новые БД для новых установок моего программного обеспечения, и мне нужно иметь возможность миграции (поэтому я фактически настроил свое приложение для автоматического выполнения миграций при запуске, чтобы никогда не пропустить какие-либо изменения).
Самое очевидное, что приходит на ум, - это иметь какой-то флаг, который говорит мигратору запускать миграции, но на самом деле не выполняет никакого кода sql при первоначальном создании, так что вновь созданная БД уже, по-видимому, будет полностью перенесена вМигратор ... и когда в какой-то более поздний момент у меня появятся новые ожидающие миграции, будут выполняться только те новые ожидающие миграции, которые были добавлены в код с момента создания начальной БД.
Мне просто интересно, чтодругие люди так делают, поскольку я не могу найти рекомендуемый подход к этой проблеме в официальной документации.