C# 如何编辑数据库迁移?

C# 如何编辑数据库迁移?,c#,.net,entity-framework,entity-framework-core,code-first,C#,.net,Entity Framework,Entity Framework Core,Code First,我重命名了一些表和一些列。当我运行addmigration命令时,迁移会生成代码,删除旧表和列,并添加具有新名称的表和列。这会导致它们包含的数据丢失 因为我不想丢失数据,所以我想编辑迁移,删除drop和add命令,并用rename命令替换它们 但在编辑迁移之后,如何应用该更改 如果运行updatedatabase命令,则会将其应用于数据库。但不是实体框架维护的模式快照(存储在ApplicationDbContextModelSnapshot) 我需要一种方法将我的编辑合并到模型中。我怎样才能做到

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

因为我不想丢失数据,所以我想编辑迁移,删除drop和add命令,并用rename命令替换它们

但在编辑迁移之后,如何应用该更改

如果运行
updatedatabase
命令,则会将其应用于数据库。但不是实体框架维护的模式快照(存储在
ApplicationDbContextModelSnapshot


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

你没有。

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

如果您首先使用代码,则必须更改模型,并让EntityFramework为您更改数据库模式。 建议如下:


因此,首先,这肯定是代码中混乱的部分

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

我想我最大的问题是,我一下子有太多的变化。在挣扎了一段时间之后,我解开了我的一些更改并一点一点地添加回来。实体框架将重命名一个表或列,如果它能够确定新名称引用的是同一列。如果它发现了很多变化,它就无法解决这个问题

最后,我不得不为被删除的两列自定义迁移(将它们自定义为重命名)。但我能够让EntityFramework重命名我的表和其他列


关键是:每次做一些小的更改,并在将它们应用到数据库之前仔细检查迁移。如果您需要自定义迁移,请这样做,以使最终结果不会更改。

您可以编辑迁移文件。非常好。但这不会更新快照。请查看我的问题。为什么需要更改快照?否则,下次我执行
添加迁移时,它将无法识别我所做的编辑,并将架构视为我所做的更改不存在。它只识别合并到快照中的更改。当您生成拖放/创建迁移时,它应该已创建具有所需结构的快照,您需要将迁移更改为重命名,以使其适合新快照。这是非常大胆的说法,我认为这不是真的。我尽可能清楚地解释了,它没有正确解释我的变化。因此,编辑迁移是获得所需结果的唯一方法。是的,我添加了code first标记,因为我使用的是code first。code-first意味着首先编辑代码模型。首先是数据库的反面。是的,你可以,但你不应该。这可能被认为是一种反模式,一种代码气味。@JonathanWood告诉我们你的意图,我们会帮助你。向我们展示您的表格和模型目前的状况,以及您希望进行哪些更改。你不应该试图破解密码。你将来会给你带来麻烦。想象一下,您何时需要更新.net或ef版本。你的密码可能会被破解。