使用 Code First 重命名 EF 中的列

Rename a column in EF with Code First

我重命名了 class 中的一个列。看起来像这样。

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

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

新的迁移文件:

public partial class _100126_2 : DbMigration
{
    public override void Up()
    {
        RenameColumn("dbo.tbClassForWhosebug", "ClassForWhosebug_Name",   "ClassForWhosebug_NewName");
    }

    public override void Down()
    {
        RenameColumn("dbo.tbClassForWhosebug", "ClassForWhosebug_NewName", "ClassForWhosebug_Name");
    }
}

启动数据库更新后,我查看了我的 class 并且属性没有改变。它仍然命名为 "Name" 而不是 "NewName"。我如何更改它而不让 EF 认为我删除并添加了一个列?

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

  1. 将实体中的 Name 属性 重命名为 NewName
  2. 向您的项目添加新迁移
  3. 更改迁移以执行重命名而不是 Drop/Create,但是 仅更改 Up/Down 方法的内容
  4. 编译并运行迁移

我就是这样做了好几次都没有问题。重要的是在创建时不要触摸与迁移关联的模型快照。

P.S.: 如果我没记错的话,如果满足某些(对我来说未知的)约束,EF 甚至会检测到重命名,因为我认为在执行简单的 property/column重命名。