16

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

update-database -f 

你会得到这样的:

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

你想要的不是什么。很显然,在这一点上运行Add-Migration可以让你进入并手动将这两个调用改为一次调用RenameColumn,但是有什么方法可以让自动迁移自动执行?有些财产重命名的方法,我可能不正确,可能?

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

回答

23

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

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

我们考虑在Add-Migration命令中添加一个-Renames开关,但最终我们决定编辑生成的代码比在命令行中提供重命名的语法更容易。

〜罗文

+1

刚刚在最新的EF(截至2014年12月8日)做了这个 - 它检测到重命名。不知道这个机制 - 罗文,你能提供建议吗? (代码第一,没有注释,没有流利 - 只是重命名了某些类的属性) –

5

我的意见:EF不知道你已经重命名现有的列。重构是设计时间变化,没有任何关于变化的持久信息,所以当你运行迁移时,EF不知道如何区分重命名和真正删除/添加新列。

+0

这将是非常有用的,虽然坚持从IDE此信息来迁移,因为迁移已经利用在许多其他方面的IDE。 –