使用Code First重命名EF中的列

时间:2016-12-06 07:03:13

标签: c# entity-framework sql-server-2012 ef-migrations

我在班上重新命名了一个专栏。它看起来像这样。

public class clsClassForStackoverflow
{
   [Column(TypeName = "varchar"), StringLength(150)]
   public string Name { get; set; }

由于结构发生了变化,我不得不重命名。所以我删除了那一行,并添加了新的属性。之后我创建了一个新的迁移文件来准备我的数据库更新,并在文件中他想删除旧列并添加新列。好吧,我将drop更改为重命名,因为数据库中仍有数据。随着下降它就会消失。

新的迁移文件:

public partial class _100126_2 : DbMigration
{
    public override void Up()
    {
        RenameColumn("dbo.tbClassForStackoverflow", "ClassForStackoverflow_Name",   "ClassForStackoverflow_NewName");
    }

    public override void Down()
    {
        RenameColumn("dbo.tbClassForStackoverflow", "ClassForStackoverflow_NewName", "ClassForStackoverflow_Name");
    }
}

启动数据库更新后,我查看了我的课程,并且属性没有改变。它仍然命名为“名称”而不是“新名称”。如果不让EF认为我删除并添加了一列,我怎么能改变呢?

1 个答案:

答案 0 :(得分:4)

您需要按以下顺序进行此更改:

  1. 将您实体中的 platform :ios, '8.0' 媒体资源重命名为Name
  2. 向项目添加新迁移
  3. 更改迁移以进行重命名而不是删除/创建,仅更改NewName / Up方法的内容
  4. 编译并运行迁移
  5. 这就是我多次没有遇到问题的方式。重要的是在创建迁移时不要触摸与迁移关联的模型快照。

    PS:如果我没记错,EF甚至会检测到重命名,如果满足某些(对我未知)约束,因为我认为在进行简单的属性/列重命名时,甚至不一定需要更改迁移。