将EF Core迁移添加到现有数据库,同时仍然能够从头开始创建数据库



去年,我用.Net Core和EF Core重写了一个遗留应用程序,但由于其他限制因素,我当时选择不添加迁移。终于到了新应用程序可以作为";真理的单一来源";对于模式更改,但对于前进的最佳方式,我有点不知所措。

我的最终目标是进行迁移,使整个现有数据库从无到有(减去非查找表中包含的数据(。不幸的是,到目前为止,我提出的最可行的解决方案是针对一个新的空白数据库构建迁移。然后,一旦创建了与当前数据库状态匹配的初始迁移,我就可以通过__EFMigrationsHistory从新创建的数据库复制到旧数据库。

或者,我可以构建一个空白的初始迁移,如果不存在SQL文件,我可以尝试在该迁移中添加逻辑,以从该文件创建数据库。


两种解决方案似乎都不是特别";好";。除了像FluentMigrator这样的工具之外,是否有任何以EF Core为中心的方法可以简化为现有数据库创建迁移,需要重新创建以进行测试?

当我想压缩过去5年中所有现有的迁移时,我也遇到了类似的问题(因为创建一个新实例需要很长时间(。我是这样做的:

  1. 从代码中删除所有迁移,包括任何DbContextModelSnapshot.cs
  2. 为初始迁移搭建脚手架:它将包含创建新DB实例的所有内容
  3. 脚手架另一个迁移,专门为初始数据播种(如果您不需要在新创建的实例上播种数据,这是可选的(。目标是将种子与SQL结构隔离开来
  4. 提交您的更改
  5. 保留迁移,但删除UpDown方法的主体;目标是诱使EF Core认为它应用了这些迁移
  6. 使用这些空迁移更新现有实例:不会执行任何操作,但__EFMigrationsHistory表将包含它们,并在将来忽略它们
  7. 恢复您的更改,以恢复迁移的主体

通过所有这些步骤,您现在可以使用任何未来的迁移更新现有实例,还可以从头开始重新创建新实例。

相关内容

  • 没有找到相关文章

最新更新