我能否在ASP.NET MVC 5中重命名Code First Migration?

3

这是有关在asp.net mvc 5中使用“Code First Migrations(代码优先迁移)”的略微奇怪的问题。我正在进行一个项目,使用手动迁移来更新我的数据库。如果我对模型中的任何内容做出了更改以更改数据库结构,则会进入程序包管理器控制台,并键入

add-migration "MigrationName"

但是在此过程中,我错误地为两个迁移命名。我想更正每个名称,但我想确保这不会影响它们的完整性,我只计划重命名文件名的第二部分(描述性部分),而不是时间戳。

例如,我有以下名称:

201411190809335_CreateStageTypeRender

但实际应该为:

201411190809335_CreateSeatingTypeRender

如果现在不更改名称,将来可能会通过错误的名称对其进行操作。

似乎,在以前没有重要项目的情况下重命名时,当我重命名时Visual Studio会自动重命名任何子文件(.cs, .resx)。因此,这似乎不是一个问题,而且时间戳仍然保持同步,以便按顺序排列。

问题:还有其他什么需要考虑的吗? 是否可以重命名迁移文件名的描述性部分?

顺便说一下,我也可以进入Designer.cs文件并将获取返回值重命名为:

public sealed partial class CreateStageTypeRender : IMigrationMetadata
    private readonly ResourceManager Resources = new ResourceManager(typeof(CreateStageTypeRender));
    string IMigrationMetadata.Id
    {
        get { return "201411190809335_CreateStageTypeRender"; }
    }

为了

public sealed partial class CreateSeatingTypeRender : IMigrationMetadata
    private readonly ResourceManager Resources = new ResourceManager(typeof(CreateSeatingTypeRender));
    string IMigrationMetadata.Id
    {
        get { return "201411190809335_CreateSeatingTypeRender"; }
    }

最后,我已经进入数据库并重命名与旧迁移名称对应的记录,并将它们更改为反映新迁移名称的内容。否则,我认为EF/Visual Studio会认为有新的迁移,而实际上没有。

我认为我已经考虑到了所有要点,请让我知道您认为是否有遗漏或者出于某种原因这不是一个好主意。


自从你第一次尝试这种技术以来,你遇到过任何问题吗? - Michael Adamission
我从未遇到过任何问题,但我也从未针对这些迁移进行过操作。我认为最终的测试是开始一个新项目,快速设置数据库并进行一些迁移,然后回头手动重命名它们,再进行一些迁移和更新,然后尝试回滚到其中一个已重命名的迁移。我们中谁先找到时间去做,就回来在这里留言吧。如果你做了,你可以回答这个问题。 - Eric Bishard
好的,听起来不错,我会试一试的... - Michael Adamission
1个回答

0

我终于回到了这个项目,问题已经解决了。

在你的例子中,你提到将返回类型更改为CreateSeatingTypeRender... 我只想澄清一下,在我的测试中,为了保持一致性,应该有五个地方需要进行更改。

其中四个是在代码中:类名、.designer文件的部分类名、资源管理器typeof和你提到的IMigrationMetadata.Id属性...

最后一个地方是在数据中,正如你也提到的,将MigrationId从旧名称更新为新名称。

做出这些更改后,升级数据库命令完美地工作了。

对于任何试图尝试这个的人,请记住,如果你正在重命名开发数据库上的迁移... 如果该迁移已经存在于生产机器上,你还需要手动重命名那里的__migration表行以及该迁移已经到达的任何其他地方,当你部署到那台机器时。

测试注释: • 我在ef 6.1.3上进行了测试 • 这不是MVC5特定的


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接