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

JD *_*vis 5 .net c# entity-framework .net-core entity-framework-migrations

去年,我使用 .Net Core 和 EF Core 重写了一个遗留应用程序,但由于其他限制因素,当时选择不添加迁移。终于到了新应用程序可以作为模式更改的“单一事实来源”运行的时候了,但我对前进的最佳方式有点茫然。

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

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


这两种解决方案似乎都特别“好”。除了诸如 之类的工具之外FluentMigrator,是否有任何以 EF Core 为中心的方法可以简化为需要重新创建测试的现有数据库创建迁移的过程?

Mét*_*ule 12

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

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

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