使用SecureCreatedAsync

时间:2019-06-17 14:46:37

标签: c# asp.net-core-mvc entity-framework-core

我在生产中有一个asp.net核心mvc网站。 DbInitializer正在使用以下代码:await context.Database.EnsureCreatedAsync()

现在我发现没有应用迁移,并且我已经看到了:

  

此外,创建的数据库以后无法更新   使用迁移。

我已将代码更改为await context.Database.MigrateAsync(),但是未应用任何迁移,并且在数据库dbo中也没有应用。__EFMigrationsHistory我看不到任何记录。

注意:我的解决方案在Migrations文件夹中已经有4个迁移类,但是它们已添加到MigrationHistory中。之所以应用其中的3个,是因为我曾经重新创建过数据库(仍然使用surecreateed)。上一次迁移未应用,因为我现在不重新创建数据库,因为它包含数据,并且现在不应用迁移,因为我在“ EnsureCreatedAsync”之前使用过。

现在如何在不丢失任何数据库数据的情况下在现有数据库中应用并开始使用迁移?

1 个答案:

答案 0 :(得分:0)

发现不可能(希望我错了)。

  1. 使用SSMS创建数据库的备份。
  2. 从包含数据的表中生成数据库的脚本。这样我将所有插入语句保存在一个.sql文件中。
  3. 删除数据库,创建一个新的空数据库,确保安全性(分配数据库用户)没问题
  4. visual studio,从未应用的解决方案中删除了所有迁移。
  5. 从解决方案中删除了种子数据(这样以后就不会与.sql脚本中的插入语句相冲突以放回数据)。
  6. 通过执行“添加迁移初始”来再次启用迁移
  7. 在开发/调试数据库上尝试使用Update-Database进行迁移
  8. 发布了网站并将其发布到网络服务器上。
  9. 在IIS中启动网站并在SSMS中验证我的所有表均已正确创建,并且_migrationhistory包含我的初始迁移
  10. 打开SSMS并从具有所有INSERT语句的.sql运行我的查询->再次添加了所有数据。

现在我的(新)数据库已启用迁移。 微软的万岁!