如何编辑数据库迁移?
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 和其他列。
关键:一次进行小的更改,并在将它们应用到数据库之前仔细检查迁移。如果您需要自定义迁移,请确保最终结果不变。
我重命名了一些表和一些列。当我 运行 Add-Migration
命令时,迁移会生成删除旧表和列并添加新名称的代码。这会导致它们包含的数据丢失。
因为我不想丢失数据,所以我想编辑迁移,删除删除和添加命令,并用重命名命令替换它们。
但是在我编辑迁移后,我该如何应用该更改?
如果我 运行 Update-Database
命令,则将其应用于数据库。但不是 Entity Framework 维护我的模式的快照(存储在 ApplicationDbContextModelSnapshot
)。
我需要一种方法将我的编辑合并到模型中。我怎样才能做到这一点?
你没有。
我想您正在使用代码优先方法进行开发,因为问题上有这个标签。
如果您首先使用代码,则必须更改模型并让 Entity Framework 为您更改数据库架构。
推荐阅读:
所以,这绝对是代码的第一部分。
就提出的问题而言,Update-Database
将 运行 您的自定义更新代码。
我认为我最大的问题是同时进行了太多更改。在为此苦苦挣扎了一段时间之后,我撤消了一些更改并将它们一点一点地添加回来。 Entity Framework 将重命名 table 或列,如果它可以确定新名称指的是同一列。如果它发现很多变化,它就无法解决这个问题。
最后,我不得不为要删除的几个列稍微自定义迁移(将它们自定义为重命名)。但是我能够让 Entity Framework 重命名我的 table 和其他列。
关键:一次进行小的更改,并在将它们应用到数据库之前仔细检查迁移。如果您需要自定义迁移,请确保最终结果不变。