实体框架核心以编程方式应用迁移

时间:2016-12-26 12:38:28

标签: asp.net-core entity-framework-core ef-migrations

我有测试和实时数据库。对于测试数据库迁移,我在包管理器控制台中使用Add-Migration ...Update-Database语法。但对于实时数据库,我想在应用程序启动时以编程方式执行此操作。

以下代码对我没有帮助:

context.Database.Migrate();

当我尝试将记录添加到不存在的表时,我有错误Invalid object name 'TempTenants'。这是我的新表。

但我有_EFMigrationsHistory表。而且我的所有迁移都是那些没有应用的迁移。但我没有看到新表。

如果我手动从测试数据库中删除表并尝试重现错误,我将得到相同的结果。

因此,context.Database.Migrate();仅创建包含所有迁移的新数据库(如果它不存在),但不更新(应用迁移)现有数据库。

我能这样做吗?我该如何解决?

1 个答案:

答案 0 :(得分:1)

似乎出了问题。我从__EFMigrationsHistory表中删除了未应用的迁移(记录)(我还需要将一些表名,主键和外键还原到以前的状态)并再次启动应用程序。

因此,context.Database.Migrate();即使对现有数据库也适用迁移。