繁体   English   中英

使用Code First重命名EF中的列

[英]Rename a column in EF with Code First

我在班上改名了。 看起来像这样。

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

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

新的迁移文件:

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");
    }
}

启动数据库更新后,我查看了我的课程,并且属性没有改变。 它仍然命名为“名称”,而不是“ NewName”。 在没有让EF认为自己删除并添加一列的情况下,我该如何更改?

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

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

这是我已经多次完成此操作的方式。 重要的是在创建迁移时不要触摸与迁移关联的模型快照。

PS:如果我没记错的话,如果满足某些(对我来说未知)约束,EF甚至可以检测到重命名,因为我认为在进行简单的属性/列重命名时,甚至不必总是更改迁移。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM