【问题标题】:EF Migrations: RenameColumn in Automatic Migrations?EF 迁移:自动迁移中的重命名列?
【发布时间】:2012-09-03 13:32:36
【问题描述】:

如果您重命名某个属性,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 中。

【问题讨论】:

    标签: entity-framework ef-code-first code-first entity-framework-5 entity-framework-migrations


    【解决方案1】:

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

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

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

    ~罗文

    【讨论】:

    • 刚刚在最新的 EF 中执行此操作(截至 2014 年 12 月 8 日) - 它检测到重命名。不确定这个机制 - 罗文,你能建议吗? (代码优先,没有注释,没有流利 - 只是重命名了某些类的属性)
    【解决方案2】:

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

    【讨论】:

    • 不过,将这些信息从 IDE 保存到 Migrations 会非常有用,因为 Migrations 已经以许多其他方式利用了 IDE。
    猜你喜欢
    • 1970-01-01
    • 2013-12-14
    • 2017-12-21
    • 1970-01-01
    • 2012-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-02
    相关资源
    最近更新 更多