EF迁移:自动迁移中的RenameColumn



如果重命名一个属性,Visual Studio IDE足够智能,可以帮助您在整个代码中重构并重命名该属性。如果重命名是在EF迁移中使用的模型上,并且您运行标准的自动迁移,如:

update-database -f

你会得到这个:

AddColumn("NewName"...
DropColumn("OldName"...

不是你想要的。显然,在这一点上运行"添加迁移"可以让您手动将这两个调用更改为对RenameColumn的单个调用,但有没有办法让"自动迁移"自动做到这一点?也许是我做得不对的一些属性重命名方法?

我在VS2012中使用EF 5.0,但这种行为也出现在EF 4.3.1和VS2010中。

迁移无法自动检测属性和列的重命名。脚手架式迁移将包含一个Drop/Create,您需要将其更改为Rename。

如果您只是重命名列(通过向属性添加[column]注释),我们可以将其检测为重命名,因为我们可以匹配列映射到的属性的名称。

我们确实考虑在"添加迁移"命令中添加–Renames开关,但最终我们决定编辑生成的代码比在命令行中计算提供重命名的语法更容易。

~罗文

我的观点:EF不知道您已经重命名了现有列。重构是设计时的更改,没有任何关于更改的持久信息,所以当您运行迁移时,EF根本不知道重命名和真正删除/添加新列之间的区别。

相关内容

  • 没有找到相关文章

最新更新