【问题标题】:EF Core Migrations manual edits possible?EF Core Migrations 可以手动编辑吗?
【发布时间】:2018-05-08 06:14:21
【问题描述】:

我在我的示例项目中使用 EF Core 2.0 和一些值对象配置。我修改代码并通过 CLI 命令行生成迁移。在最后一次迁移中,它没有按应有的方式添加新的数据库表,而是尝试将现有表重命名为彼此并为现有表创建一个额外的表。我无法弄清楚它的原因。

问题是,由于使用 EF Core,快照是与迁移本身分开的自动生成文件,我不想修改快照。

我只想修改迁移脚本,使其不会重命名多个表,然后从我创建的迁移中生成快照。

我在 CLI 中没有看到任何用于此的命令 - 修改脚手架迁移并重新生成是一种糟糕的做法,还是我错过了一些明显的新链接,其中解释了如何手动修改迁移脚本?

非常感谢。

更新 1:在 cmets 之后,添加了来自 this link 的快照信息。

由于当前数据库架构以代码表示,EF Core 不必与数据库交互来创建迁移。添加迁移时,EF 通过将数据模型与快照文件进行比较来确定更改的内容。 EF 仅在必须更新数据库时才与数据库交互。 +

【问题讨论】:

  • 你不能只修改文件吗?如果您没有另外指定,它位于 Migrations 文件夹中。
  • 我可以 - 但是如果我错过任何东西,这是否有使快照变得陈旧的风险?如果可能,我想从迁移中生成它,如果当前代码状态与合并的迁移不匹配,框架会返回错误。
  • @cassandrad 如果在这种情况下快照和文件之间存在差异会发生什么? _ContextModelSnapshot 文件在同一个文件夹中,如果不使用它的目的是什么。
  • 我不太明白你所说的快照是什么。你能详细说明吗?如果您只更改脚本而不更改 DbSet 的上下文类型,您将无法以正常方式再次重命名表。因此,如果要正确重命名表,则需要重命名类型或使用 Fluent API 设置名称。
  • @cassandrad 请检查链接:docs.microsoft.com/en-us/aspnet/core/data/ef-mvc/migrations - 从那里:“因为当前数据库模式以代码表示,EF Core 不必与数据库交互来创建迁移。当你添加迁移后,EF 通过将数据模型与快照文件进行比较来确定发生了什么变化。EF 仅在必须更新数据库时才与数据库交互。” - 这是快照文件 - 我将更新问题以进行澄清。

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


【解决方案1】:

我检查了源代码管理中生成的快照代码。它恰好根据我的需要添加了一张额外的桌子。

生成这个的迁移脚本充其量是忙碌的 - 将多个表重命名为彼此,然后警告这可能会导致多个问题。

因为这对我来说是一个示例项目,至少到目前为止只有模拟数据,所以我决定去做,而不是破坏自动化脚本。我愿意在这个阶段丢失一些模拟数据,而不是在上面浪费时间。

如果这是在生产数据库中,我会非常小心地手动创建相同的结果,同时修改脚手架和迁移文件。

我接受这个作为答案(基本上是说目前的 EF Core 不支持它,据我目前所知)因为现在没有其他候选人 - 如果有更好的答案显示,我将非常乐意接受向上。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-08
    • 2019-11-20
    • 2021-11-22
    • 1970-01-01
    • 2018-08-24
    • 2016-03-22
    • 1970-01-01
    • 2021-05-14
    相关资源
    最近更新 更多