【问题标题】:Is there any command in Code-based EF migration to re-create the database基于代码的 EF 迁移中是否有任何命令可以重新创建数据库
【发布时间】:2019-01-26 16:10:58
【问题描述】:

我正在使用 ASP.NET MVC4。我正在切换到已经存在的测试数据库。 是否有任何基于代码的迁移命令来删除和重新创建数据库,例如 Update-Database-DropCreate

我不想使用任何数据库初始化程序,例如DropCreateDatabaseIfModelChanges,因为当我切换回实时数据库时,我将不得不手动删除初始化程序代码。有没有其他方法可以做到这一点,以便我以后使用实时数据库时不必进行任何更改。

我尝试了Update-Database -force,但它没有重新创建数据库。

【问题讨论】:

  • 据我了解,您想在现有数据库上应用迁移吗?您可以使用 context.Database.MigrateAsync() 或简单地通过在 appsettings.json 中添加配置部分来指示您是否使用开发环境来实现这一点。并仅在 dev 上触发方法,并在 env 的其余部分更改该设置。

标签: c# asp.net-mvc-4 ef-code-first entity-framework-migrations


【解决方案1】:

如果您使用依赖注入并使用容器注入上下文类,您可以使用初始化策略为测试数据库创建不同的上下文,并保留原来的上下文,您所要做的就是更改注入的上下文,甚至添加一个上下文工厂根据环境创建特定上下文

如果这很复杂,那么另一种方法是将初始化策略添加到您的上下文中并添加一个条件来检查这是测试服务器还是生产服务器(您可以从您可以从上下文中获取的连接字符串中知道这一点)

【讨论】:

  • 谢谢;如果您可以为上述两种方法粘贴一些代码 sn-ps 也会非常有帮助。
【解决方案2】:

如果您通过迁移命令执行此操作,您只需使用 -TargetMigration 0 运行该命令,然后再次执行更新数据库。

【讨论】:

  • 备份一下,以防万一:)
  • 另外,任何原因,只需右键单击 SSMS 中的 DB 上的删除并删除现有连接就行不通了吗?意思是您需要命令来执行此操作吗?只需运行 Update-Database 也应该能让您恢复正常。
  • 我有多个迁移(使用实时数据库创建)。一个一个地运行所有的 -TargetMigrations 有什么意义,只是为了重新创建测试数据库?
  • 不,不是一一。您运行两个命令:1)“Update-Database -TargetMigration 0”和 2)“Update-Database”。第一个会将它们全部回滚(这是我假设您要清除数据,第二个将创建模式(如果在迁移中则查找数据)
  • 我对您的回答做了一些修改。请检查并确认;如果您觉得可以进一步编辑。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-09-16
  • 2015-06-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-19
  • 1970-01-01
相关资源
最近更新 更多