18

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

update-database -f

你会得到这个:

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

不是你想要的。显然此时运行 Add-Migration 会让您进入并手动将这 2 个调用更改为对 RenameColumn 的单个调用,但是有什么方法可以让 Automatic Migrations 自动执行此操作吗?一些我做的不对的属性重命名方法,也许?

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

4

2 回答 2

23

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

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

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

〜罗文

于 2012-09-11T19:36:05.543 回答
5

我的意见:EF 不知道您已重命名现有列。重构是设计时更改,没有任何关于更改的持久信息,因此当您运行迁移时,EF 根本不知道如何区分重命名和实际删除/添加新列。

于 2012-09-10T19:37:43.647 回答