手动编辑 EF7 迁移 Class 和快照

Manually Editing an EF7 Migration Class & Snapshot

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

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

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

  1. 主要迁移class: UpDown方法应该修改。
  2. DbContextModelSnapshot文件包含需要修改的注解
  3. 二次迁移部分class:命名错误的[migration].Designer.cs文件还包含迁移的模型快照。我假设此快照需要与项目 2 中的模型快照匹配,但不确定。关于它的用途,我唯一知道的信息来自 Brice's blog ,它说 "It’s there in case you or a provider need to inspect the model for additional information during a migration."

具体问题:

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

具体答案:

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

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

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

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