将EF迁移整合到新的InitialCreate中

我一直在使用EF迁移一段时间,在我的项目中有超过100个迁移文件。 我希望将这些合并到一个单一的迁移前,即前进 – 即我想用一个新的版本replace现有的InitialCreate迁移,考虑到我所有的后续变化,所以我可以删除所有其他迁移文件。

如果我不关心丢失数据库中的所有数据,我很容易做到这一点,但我是。

我怎样才能做到这一点,同时保持所有的数据不变,还保留了从头开始重新创build数据库(无数据)的能力,只需运行Update-Database(我认为使用Julie Lerman概述的方法是不可能的 )?

如果你不关心保持这种迁移,我所做的就是删除你的迁移文件夹中的所有内容,然后在连接string中定位一个新的数据库(或者传入一个新的数据库)。 之后,您可以运行add-migration命令:

add-migration InitialCreate 

它应该为您创build迁移。

考虑阅读里克斯特拉尔这篇不错的文章: https : //weblog.west-wind.com/posts/2016/jan/13/resetting-entity-framework-migrations-to-a-clean-slate

基本上这个解决scheme不是微不足道的,而且需要的不仅仅是将所有的迁移重新整合到一个迁移中,因为你有两个场景需要适应一个迁移类:

  • 创build一个新的数据库=>迁移类应该包含每个表的创build
  • 我的数据库已经是最新的=>我需要一个空的迁移类

解决scheme:这个过程的想法基本上是这样的:数据库和EF模式是最新的,只是你想要的方式,所以我们将删除现有的迁移,并创build一个新的初始迁移。

总之,这样做的步骤是:

  • 从数据库中删除_MigrationHistory表
  • 删除项目的Migrations文件夹中的单个迁移文件
  • 在软件包pipe理器控制台中启用迁移
  • PMC中的添加迁移初始化
  • 在Initial Migration中注释掉Up方法中的代码
  • PMC中的更新数据库(除了创build迁移条目之外别无其他)删除Initial方法中的注释现在您已经将模式重置为最新版本。
  • 一旦注释掉的迁移已经在所需的数据库上执行,请取消注释迁移代码