将EF迁移整合到新的InitialCreate中

Pau*_*les 47 entity-framework ef-migrations entity-framework-5

我一直在使用EF迁移一段时间,并且在我的项目中有超过100个迁移文件.我希望在继续之前将这些整合到一个迁移中 - 即我想用一个新版本替换现有的InitialCreate迁移,该版本将我的所有后续更改都考虑在内,这样我就可以删除所有其他迁移文件.

如果我不关心丢失数据库中的所有数据,我很容易这样做,但我是.

如何通过运行Update-Database(我认为使用Julie Lerman概述的方法无法实现)来保持所有数据的完整性并保留从头开始重新创建数据库(无数据)的能力?

Mic*_*ael 18

请阅读Rick Strahl的这篇精彩文章:https: //weblog.west-wind.com/posts/2016/jan/13/resetting-entity-framework-migrations-to-a-clean-slate

基本上,解决方案并不简单,只需将所有迁移重置为一个,因为您有两个场景需要适合一个迁移类:

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

解决方案:此过程的想法基本上是这样的:数据库和EF模式是最新的,只是您想要的方式,因此我们将删除现有的迁移并创建新的初始迁移.

总之,执行此操作的步骤是:

  • 从数据库中删除_MigrationHistory表
  • 删除项目的Migrations文件夹中的各个迁移文件
  • 在程序包管理器控制台中启用 - 迁移
  • PMC中的Add-migration Initial
  • 在初始迁移中注释掉Up方法中的代码
  • PMC中的更新数据库(除了创建迁移条目之外什么都不做)在Initial方法中删除注释现在您已经基本上将模式重置为最新版本.
  • 一旦在所需数据库上执行了注释掉的迁移,就取消注释迁移代码


Mar*_*eta 11

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

add-migration InitialCreate
Run Code Online (Sandbox Code Playgroud)

它应该为您创建迁移.

  • 这是一个有点缺陷的方法,因为它只会从EF可以从您的代码中扣除的内容中创建一个迁移.您在先前迁移中自定义配置的所有内容都将丢失,例如自定义检查约束,筛选索引等. (7认同)