手动编辑EF7迁移类和快照

ult*_*ife 2 ef-migrations entity-framework-core

EF7 migration add命令(迄今为止,beta5)将DbContext针对当前模型快照定义的模型类进行比较,创建新的迁移类,并更新模型快照.

我需要修改迁移,使其生成不同的DDL SQL.例如,EF7使用SQL Server自动增量值的序列,我希望它使用标识.然而,这可能是任何其他原因.该migration remove命令将物理删除迁移文件并还原模型快照,因此在这种情况下它是无用的.

有3个文件包含看起来需要编辑的相关代码:

  1. 主要迁移类:应该修改UpDown方法.
  2. DbContextModelSnapshot文件包含需要修改的注释
  3. 辅助迁移部分类:命名错误的[migration].Designer.cs文件还包含迁移的模型快照.我假设这个快照需要匹配第2项中的模型快照,但我不确定.我有关于它的目的的唯一信息来自Brice的博客,该博客说:"如果您或提供商需要在迁移过程中检查模型以获取更多信息,那就是存在的."

具体问题:

  1. 两个模型快照是否需要保持同步才能正确执行迁移?
  2. 修改3个单独的文件是编辑迁移的唯一方法吗?(虽然取决于更改,但在某些情况下可能不必触摸模型快照.)
  3. 是否有一些EF命令只能重新生成模型快照,而不是重新生成迁移方法?

bri*_*lam 5

具体答案:

  1. 两个模型快照是否需要保持同步才能正确执行迁移?
    不,迁移中的快照是提供者编写者的最后手段.例如,SQLite无法重命名列,因此可以使用迁移的模型快照为此操作执行表重建.99%的时间,它永远不会被使用.

  2. 修改3个单独的文件是编辑迁移的唯一方法吗?
    大多数情况下,您应该只编辑主迁移文件.在极少数情况下,如果您在团队环境中工作并遇到合并冲突,则可能需要编辑模型快照.您可以忽略设计器文件; 它只是捕获有关迁移的一些元数据.

    如果正确配置模型,则可能无需编辑任何内容.例如,要使用标识而不是序列,请覆盖DbContext.OnModelCreating()和添加modelBuilder.ForSqlServer().UseIdentity().

  3. 是否有一些EF命令只能重新生成模型快照,而不是重新生成迁移方法?
    不,它不应该被需要,因为你几乎从不编辑这些文件.