gpt4 book ai didi

entity-framework-migrations - 手动编辑 EF7 迁移类和快照

转载 作者:行者123 更新时间:2023-12-04 02:00:55 25 4
gpt4 key购买 nike

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

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

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

  • 主要迁移类:应修改 UpDown 方法。
  • DbContextModelSnapshot 文件包含需要修改的 Annotations
  • 次要迁移部分类:名称错误的 [migration].Designer.cs 文件还包含用于迁移的模型快照。我假设此快照需要与第 2 项中的模型快照匹配,但我不确定。我所拥有的关于它的目的的唯一信息来自 Brice's blog ,它说“它在那里,以防您或提供商需要在迁移期间检查模型以获取其他信息。”

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

    具体答案:

  • 两个模型快照是否需要保持同步才能正确执行迁移?
    不,迁移中的快照是提供程序编写者的最后手段。例如,SQLite 无法重命名列,因此它可以使用迁移的模型快照为该操作执行 table rebuild。 99% 的情况下,它永远不会被使用。
  • 修改 3 个单独的文件是编辑迁移的唯一方法吗?
    大多数情况下,您应该只编辑主迁移文件。在极少数情况下,如果您在团队环境中工作并且遇到合并冲突,您可能需要编辑模型快照。您可以忽略设计器文件;它只是捕获有关迁移的一些元数据。

    如果您正确配置了模型,则可能无需编辑任何内容。例如,要使用身份而不是序列,请覆盖 DbContext.OnModelCreating() 并添加 modelBuilder.ForSqlServer().UseIdentity()
  • 是否有一些 EF 命令可以仅重新生成模型快照,而不是迁移方法?
    不,应该不需要它,因为您几乎从不编辑这些文件。
  • 关于entity-framework-migrations - 手动编辑 EF7 迁移类和快照,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31309200/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com