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

问题描述:

我有测试和活动分贝。对于测试数据库迁移,我在包管理器控制台中使用Add-Migration ...Update-Database语法。但是对于活的数据库,我希望在应用程序启动时以编程方式执行。实体框架核心以编程方式应用迁移

下面的代码并没有帮助我:

context.Database.Migrate(); 

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

但我有_EFMigrationsHistory表。而且,我所有的迁徙,甚至是那些没有实施的迁徙。但我没有看到新桌子。

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

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

我可以这样做吗?我该如何解决这个问题?

+0

请更清楚“没有帮助我”。为什么?发生了什么?错误信息?你的数据库最初也是由迁移创建的(是否有'__EFMigrationsHistory'表)? – Tseng

+0

@Tseng我已经更新了我的问题,请看看。 –

+0

开始时没有例外吗?日志读取的内容是什么?用户是否对数据库服务器有足够的写入权限? (ALTER/CREATE语句) – Tseng

看来出了点问题。我从__EFMigrationsHistory表中删除了未应用的迁移(记录)(还需要将某些表名,主键和外键恢复到以前的状态),然后再次启动应用程序。

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