如何编辑数据库迁移?

问题描述 投票:0回答:3

我重命名了一些表和一些列。当我运行

Add-Migration
命令时,迁移会生成删除旧表和列并添加具有新名称的代码。这会导致丢失其中包含的数据。

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

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

如果我运行

Update-Database
命令,则会将其应用于数据库。但不是实体框架维护的我的架构的快照(存储在
ApplicationDbContextModelSnapshot
中)。

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

c# .net entity-framework entity-framework-core code-first
3个回答
1
投票

所以,这绝对是代码中最混乱的部分。

就所提出的问题而言,正如 GuruStron 建议的那样,我发现有效的自定义迁移的唯一方法是对其进行编辑,以使结果与原始生成的迁移产生的结果相同。这可以使其与数据库快照保持同步。运行

Update-Database
将运行您的自定义更新代码。

我认为我最大的问题是我同时进行了太多的改变。在为此苦苦挣扎了一段时间后,我撤消了一些更改,然后一点一点地将它们添加回来。如果实体框架可以确定新名称引用同一列,则实体框架将重命名表或列。如果它发现很多变化,它就无法弄清楚。

最后,我必须对要删除的几个列进行一些自定义迁移(将它们自定义为重命名)。但我能够让实体框架重命名我的表和其他列。

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


0
投票

假设您需要删除一个表中的一列并将其添加到另一个表中,但由于原始表中的列包含您不想丢失的数据。您更改实体来完成此操作并进行迁移...但是...新表中的列为空。因此,您可以将 C# 迁移文件编辑为:

  1. 在目标表中创建一个新列。

  2. 将数据从源列复制到目标列。

  3. 删除源表列。

这不是做作,而是真实的需要。


-2
投票

你不知道。

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

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

建议阅读:

© www.soinside.com 2019 - 2024. All rights reserved.