我得到了例外:
无法更新数据库以匹配当前模型,因为有 挂起的更改和自动迁移已禁用...
我已经有一个解决方案长期工作,没有任何问题。事实上,我几天前对数据库进行了更改,所有人都很好地使用标准add-migration
,后跟update-database
,没有任何问题。
但是今天我再次对数据库进行了更改,并add-migration
后跟update-database
。但是当我运行应用程序时,我得到了上述错误。
我通过在Application_Start中包含以下内容来确保迁移运行:
ConfigurationPlatform configurationPlatform = new ConfigurationPlatform();
DbMigrator migratorPlatform = new DbMigrator(configurationPlatform);
migratorPlatform.Update();
,配置类如下所示:
public sealed class ConfigurationPlatform : DbMigrationsConfiguration<TreasurePlatformDbContext>
{
public ConfigurationPlatform()
{
AutomaticMigrationsEnabled = false;
AutomaticMigrationDataLossAllowed = false;
ContextKey = "TreasurePlatform";
}
protected override void Seed(TreasurePlatformDbContext aContext)
{
// This method will be called every time after migrating to the latest version.
// You can add any seed data here...
}
}
我也尝试过:
我确信POCO表模型与数据库中的模型匹配。有没有人有任何建议或认为我可以尝试?
答案 0 :(得分:3)
实体框架在每次迁移中存储模型的快照。听起来您的快照已与当前模型不同步。有两种潜在的解决方法。
这将创建一个空白的虚拟迁移,其中包含最新模型的快照,但不包含实际代码。不幸的是,这确实意味着您将在项目中添加其他代码。
运行Add-Migration <pick_a_name> –IgnoreChanges
这将回滚数据库,然后使用更新的快照重新创建迁移。
仅当您尚未将迁移推送到Git或更新任何其他数据库时,才可以执行此操作。否则,任何其他更新的数据库也需要从该过程的步骤1的上一次迁移回滚到第二个数据库。
Update-Database –TargetMigration <second_last_migration>
Add-Migration <full_name_including_timestamp_of_last_migration>
您需要包括时间戳记,以便迁移知道您要 编辑现有迁移,而不是搭建新迁移。 这将更新上一次迁移的元数据以匹配 当前模型。
Update-Database