Я работаю с Entity Framework 5.0 First First Migrations, и у меня возникла проблема с запуском Update-Database. В нем говорится, что ожидаются изменения модели; но он должен быть обновленным, поэтому я запускаю
Add-Migration SomeMigrationName
и он создает файл... однако он создает файл, который по сути является одним и тем же дублированием предыдущей миграции (если я снова пытаюсь обновить базу данных в этом файле, у него возникают проблемы, связанные с попыткой удалить несуществующее ограничение). Кроме того, мне удалось подтвердить, что "первоначальная" миграция была выполнена на основе как модели данных в БД, так и из-за наличия записи в таблице __MigrationHistory!
Если я удалю всю базу данных и снова запустил все миграции, автоматически или вручную, у меня такая же проблема.
"Первоначальный" файл миграции, который у меня был, следующий:
public partial class RenameLinkColumns : DbMigration
{
public override void Up()
{
DropForeignKey("dbo.Listing", "OfferedByUserId", "dbo.User");
DropIndex("dbo.Listing", new[] { "OfferedByUserId" });
AddColumn("dbo.Listing", "ListedByUserId", c => c.Int(nullable: false));
AddForeignKey("dbo.Listing", "ListedByUserId", "dbo.User", "UserId", cascadeDelete: true);
CreateIndex("dbo.Listing", "ListedByUserId");
DropColumn("dbo.Listing", "OfferedByUserId");
}
public override void Down()
{
AddColumn("dbo.Listing", "OfferedByUserId", c => c.Int(nullable: false));
DropIndex("dbo.Listing", new[] { "ListedByUserId" });
DropForeignKey("dbo.Listing", "ListedByUserId", "dbo.User");
DropColumn("dbo.Listing", "ListedByUserId");
CreateIndex("dbo.Listing", "OfferedByUserId");
AddForeignKey("dbo.Listing", "OfferedByUserId", "dbo.User", "UserId", cascadeDelete: true);
}
}
Когда я снова запустил эту Add-Migration, методы Up/Down в этом файле точно такие же.
Я очень впечатлен тем, что миграция правильно распознала, что я переименовал столбец ForeignKey; но это то, что заставляет это задыхаться?
Кажется, что есть обход: я удалил базу данных и все файлы миграции и создал новую "начальную" миграцию, но я бы предпочел не делать этого, если это возможно.
Обновление: Это была не последняя миграция, вызвавшая эту проблему, но проблема возникла после слияния (я работаю один, но я имитирую работу команды в ветких, чтобы узнать больше о git тоже), и пытается получить базу данных в шаге с слиянием. Возможно, это произошло из-за переноса миграции в определенном порядке после слияния - хотя отмечено, миграция действительно работала, как ожидалось, в том порядке, в котором они выполнялись, когда я дал им пустую БД.
Кроме того, эта первоначальная миграция требует ручной настройки, когда в таблицы были данные, поскольку данные необходимо скопировать из старого в новый столбец. Тем не менее, я протестировал этот файл с моими ручными изменениями и без него в этом файле и по-прежнему сталкивался с отмеченным поведением.