手动编辑 EF7 迁移 Class 和快照
Manually Editing an EF7 Migration Class & Snapshot
EF7 migration add
命令(迄今为止,beta5)将 class 中定义的模型 DbContext
与当前模型快照进行比较,创建新迁移 class,并更新模型快照。
我需要修改迁移以使其生成不同的 DDL SQL。例如,EF7 使用 SQL 服务器自动增量值的序列,我希望它使用标识。但是,这可能是任何其他原因。 migration remove
命令会物理删除迁移文件并还原模型快照,因此在这种情况下没有用。
有 3 个文件包含看起来需要编辑的相关代码:
- 主要迁移class:
Up
和Down
方法应该修改。
DbContextModelSnapshot
文件包含需要修改的注解
- 二次迁移部分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."
具体问题:
- 两个模型快照是否需要保持同步才能正确执行迁移?
- 修改 3 个单独的文件是编辑迁移的唯一方法吗? (虽然根据更改,在某些情况下可能不必触摸模型快照。)
- 是否有一些 EF 命令只重新生成模型快照,而不重新生成迁移方法?
具体答案:
两个模型快照是否需要保持同步才能正确执行迁移?
不,迁移中的快照是提供商作者的最后手段。例如,SQLite 无法重命名列,因此它可以使用迁移的模型快照为此操作执行 table rebuild。 99% 的时间,它永远不会被使用。
修改 3 个单独的文件是编辑迁移的唯一方法吗?
大多数时候,您应该只编辑主迁移文件。在极少数情况下,如果您在团队环境中工作并且遇到合并冲突,则可能需要编辑模型快照。您可以忽略设计器文件;它只是捕获有关迁移的一些元数据。
如果您正确配置了模型,则可能无需编辑任何内容。例如,要使用标识而不是序列,请覆盖 DbContext.OnModelCreating()
并添加 modelBuilder.ForSqlServer().UseIdentity()
.
是否有一些 EF 命令只会重新生成模型快照,而不是迁移方法?
不,不需要它,因为您几乎从不编辑这些文件。
EF7 migration add
命令(迄今为止,beta5)将 class 中定义的模型 DbContext
与当前模型快照进行比较,创建新迁移 class,并更新模型快照。
我需要修改迁移以使其生成不同的 DDL SQL。例如,EF7 使用 SQL 服务器自动增量值的序列,我希望它使用标识。但是,这可能是任何其他原因。 migration remove
命令会物理删除迁移文件并还原模型快照,因此在这种情况下没有用。
有 3 个文件包含看起来需要编辑的相关代码:
- 主要迁移class:
Up
和Down
方法应该修改。 DbContextModelSnapshot
文件包含需要修改的注解- 二次迁移部分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."
具体问题:
- 两个模型快照是否需要保持同步才能正确执行迁移?
- 修改 3 个单独的文件是编辑迁移的唯一方法吗? (虽然根据更改,在某些情况下可能不必触摸模型快照。)
- 是否有一些 EF 命令只重新生成模型快照,而不重新生成迁移方法?
具体答案:
两个模型快照是否需要保持同步才能正确执行迁移?
不,迁移中的快照是提供商作者的最后手段。例如,SQLite 无法重命名列,因此它可以使用迁移的模型快照为此操作执行 table rebuild。 99% 的时间,它永远不会被使用。修改 3 个单独的文件是编辑迁移的唯一方法吗?
大多数时候,您应该只编辑主迁移文件。在极少数情况下,如果您在团队环境中工作并且遇到合并冲突,则可能需要编辑模型快照。您可以忽略设计器文件;它只是捕获有关迁移的一些元数据。如果您正确配置了模型,则可能无需编辑任何内容。例如,要使用标识而不是序列,请覆盖
DbContext.OnModelCreating()
并添加modelBuilder.ForSqlServer().UseIdentity()
.是否有一些 EF 命令只会重新生成模型快照,而不是迁移方法?
不,不需要它,因为您几乎从不编辑这些文件。