如何编辑数据库迁移?

How do you edit a database migration?

我重命名了一些表和一些列。当我 运行 Add-Migration 命令时,迁移会生成删除旧表和列并添加新名称的代码。这会导致它们包含的数据丢失。

因为我不想丢失数据,所以我想编辑迁移,删除删除和添加命令,并用重命名命令替换它们。

但是在我编辑迁移后,我该如何应用该更改?

如果我 运行 Update-Database 命令,则将其应用于数据库。但不是 Entity Framework 维护我的模式的快照(存储在 ApplicationDbContextModelSnapshot)。

我需要一种方法将我的编辑合并到模型中。我怎样才能做到这一点?

你没有。

我想您正在使用代码优先方法进行开发,因为问题上有这个标签。

如果您首先使用代码,则必须更改模型并让 Entity Framework 为您更改数据库架构。

推荐阅读:

所以,这绝对是代码的第一部分。

就提出的问题而言,,我发现拥有有效自定义迁移的唯一方法是对其进行编辑,使结果与原始生成的迁移产生的结果相同。这使它与数据库快照保持同步。 运行ning Update-Database 将 运行 您的自定义更新代码。

我认为我最大的问题是同时进行了太多更改。在为此苦苦挣扎了一段时间之后,我撤消了一些更改并将它们一点一点地添加回来。 Entity Framework 将重命名 table 或列,如果它可以确定新名称指的是同一列。如果它发现很多变化,它就无法解决这个问题。

最后,我不得不为要删除的几个列稍微自定义迁移(将它们自定义为重命名)。但是我能够让 Entity Framework 重命名我的 table 和其他列。

关键:一次进行小的更改,并在将它们应用到数据库之前仔细检查迁移。如果您需要自定义迁移,请确保最终结果不变。