手动编辑EF7迁移类&快照

时间:2015-07-09 05:52:03

标签: 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's blog ,其中说“如果您或提供商需要在迁移过程中检查模型以获取其他信息,那就是存在的。”
  4. 具体问题:

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

1 个答案:

答案 0 :(得分:5)

具体答案:

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

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

    如果正确配置模型,则可能无需编辑任何内容。例如,要使用标识而不是序列,请覆盖let range = SKRange(lowerLimit:50, upperLimit:100) let constraint = SKConstraint.distance(range, to: cat) mouse.constraints = [constraint] 并添加DbContext.OnModelCreating()

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