【发布时间】: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