如果重命名属性,Visual Studio IDE非常智能,可以帮助您重构代码中的该属性重命名。如果重命名位于EF迁移中使用的模型上,则运行标准自动迁移,如:
update-database -f
你会得到这个:
AddColumn("NewName"...
DropColumn("OldName"...
不是你想要的。显然,此时运行Add-Migration将允许您进入并手动将这两个调用更改为对RenameColumn的单个调用,但是有一些方法可以让自动迁移自动执行此操作吗?一些财产重命名的方法可能是我做得不对,或许?
我在VS2012中使用EF 5.0,但此行为也出现在EF 4.3.1和VS2010中。
答案 0 :(得分:23)
迁移无法自动检测属性和列的重命名。 scaffolded migration将包含一个Drop / Create,您需要将其更改为Rename。
如果您只是重命名列(通过向属性添加[Column]注释),我们可以将其检测为重命名,因为我们可以匹配列映射到的属性的名称。
我们确实考虑过将-Renames开关添加到Add-Migration命令,但最后我们决定编辑生成的代码比编写在命令行提供重命名的语法更容易。
〜罗文
答案 1 :(得分:5)
我的观点:EF不知道您已重命名现有列。重构是设计时更改,没有任何有关更改的持久信息,因此当您运行迁移时,EF根本不知道如何区分重命名和实际删除/添加新列。