实体框架核心以编程方式应用迁移
问题描述:
我有测试和活动分贝。对于测试数据库迁移,我在包管理器控制台中使用Add-Migration ...
和Update-Database
语法。但是对于活的数据库,我希望在应用程序启动时以编程方式执行。实体框架核心以编程方式应用迁移
下面的代码并没有帮助我:
context.Database.Migrate();
我有错误Invalid object name 'TempTenants'
当我尝试添加记录不存在的表。这是我的新桌子。
但我有_EFMigrationsHistory
表。而且,我所有的迁徙,甚至是那些没有实施的迁徙。但我没有看到新桌子。
如果我手动从测试数据库中删除表并尝试重现错误,我会得到相同的结果。
因此,context.Database.Migrate();
只创建具有所有迁移的新数据库,如果它不存在但不更新(应用迁移)现有数据库。
我可以这样做吗?我该如何解决这个问题?
答
看来出了点问题。我从__EFMigrationsHistory
表中删除了未应用的迁移(记录)(还需要将某些表名,主键和外键恢复到以前的状态),然后再次启动应用程序。
因此,context.Database.Migrate();
即使对现有数据库也适用迁移。
请更清楚“没有帮助我”。为什么?发生了什么?错误信息?你的数据库最初也是由迁移创建的(是否有'__EFMigrationsHistory'表)? – Tseng
@Tseng我已经更新了我的问题,请看看。 –
开始时没有例外吗?日志读取的内容是什么?用户是否对数据库服务器有足够的写入权限? (ALTER/CREATE语句) – Tseng