【问题标题】:Manually Editing an EF7 Migration Class & Snapshot手动编辑 EF7 迁移类和快照
【发布时间】:2015-09-27 08:08:48
【问题描述】:

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 ,上面写着“如果您或提供商需要在迁移期间检查模型以获取更多信息,它就在那里。”

具体问题:

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

【问题讨论】:

    标签: entity-framework-migrations entity-framework-core


    【解决方案1】:

    具体答案:

    1. 两个模型快照是否需要保持同步才能正确执行迁移?
      不,迁移中的快照是提供者编写者的最后手段。例如,SQLite 不能重命名列,所以它可以使用迁移的模型快照来为这个操作做一个table rebuild。 99% 的情况下,它永远不会被使用。

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

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

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

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-11-24
    • 1970-01-01
    • 2020-02-09
    • 2016-05-26
    • 2017-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多