3

这是一个有关asp.net mvc 5中代码优先迁移的稍微奇怪的问题。我有一个正在进行的项目,我使用手动迁移来更新我的数据库。如果我做任何事情,在我的模型改变了数据库结构,然后我进入包管理器控制台,然后输入我可以在ASP.NET MVC中重命名代码优先迁移5

add-migration "MigrationName"

但一路走来,我已经叫我的两个迁移错了名字的。我想更正每个名称,但是我想确保这不会影响它们的完整性,我只打算重命名文件名的第二部分(描述性部分)而不是时间戳。

比如我有以下名字:

201411190809335_CreateStageTypeRender

但它应该已经阅读

201411190809335_CreateSeatingTypeRender

,如果我没有在未来,现在改名字,我可能目标因为我将其命名为错误,因此意外移民。

看来,如果在它不是一个重要项目的情况下,我将它们重命名过,那个视觉工作室就会重命名任何子文件(.cs,.resx)。所以看起来这不会是一个问题,再加上时间戳会保持同步,以便让它们保持有序。

问:还有什么我应该考虑的。重命名迁移文件名的描述部分可以吗?

BTW ..我也可以去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会认为有没有新的迁移。

我想我已经覆盖了所有的基地。如果您认为我错过了任何东西,或者由于某种原因这不是一个好主意,请告诉我。

+0

你有过这种技术的任何问题,因为你第一次尝试过吗? – madamission 2015-07-19 12:31:52

+0

但是我没有遇到任何问题,我也从未针对这些迁移。我认为最终的测试将是开始一个新项目,快速设置数据库并进行一些迁移,然后返回并手动重命名它们,进行更多迁移和更新,然后尝试回滚到其中一个重命名的迁移。那怎么样,我们哪个人可以先找到时间来做这件事,回到这里并留下评论。地狱,如果你这样做,你可以回答这个问题。 – 2015-07-20 13:28:59

+0

ok听起来不错,我会给它一个镜头... – madamission 2015-07-20 17:43:59

回答

0

我终于回到了有这个问题的项目,它效果很好。

在你的例子中,你提到你将返回类型改为CreateSeatingTypeRender ...我只是想澄清一下,对于我的测试,以一致性的名义,有五个地方应该作出改变。

那些有四个位于代码:类名,.designer文件的部分类名,资源管理器的typeof和你提到的IMigrationMetadata.Id财产...

最后的地方是在数据,你还提到,请将MigrationId从旧名称更新为新名称。

进行这些更改的upgrade-database命令可以很好地工作。

对于任何尝试此操作的人,请记住,如果您要在dev数据库上重命名迁移程序......如果该迁移程序已存在于生产计算机上,则必须手动重命名__migration表格行以及此迁移已在您部署到该机器时已完成的任何其他位置。

测试注释: •我的EF测试6.1.3 •这不是MVC5具体