Entity framework 实体框架(代码优先迁移):在重命名列时,是否也需要对模型进行更改?

Entity framework 实体框架(代码优先迁移):在重命名列时,是否也需要对模型进行更改?,entity-framework,entity-framework-migrations,Entity Framework,Entity Framework Migrations,我必须重命名数据库中的两列。我正在进行代码优先迁移。 因此,我将以下代码添加到迁移文件中的up()和down()方法中,该文件是在PackageManager控制台中运行“add migration migration_name”命令后创建的 代码 public override void Up() { RenameColumn(table: "dbo.Table1", name: "oldColumnName", newName: "newColumnName");

我必须重命名数据库中的两列。我正在进行代码优先迁移。 因此,我将以下代码添加到迁移文件中的up()和down()方法中,该文件是在PackageManager控制台中运行“add migration migration_name”命令后创建的

代码

 public override void Up()
     {
       RenameColumn(table: "dbo.Table1", name: "oldColumnName", newName: "newColumnName");
       RenameColumn(table: "dbo.Table1", name: "oldColumnName2", newName: "newColumnName2");
     }

    public override void Down()
    {
       RenameColumn(table: "dbo.Table1", name: "oldColumnName2", newName: "newColumnName2");
       RenameColumn(table: "dbo.Table1", name: "oldColumnName", newName: "newColumnName");
     }
}
我没有对我的模型做任何更改,因为如果我在模型中添加或删除任何属性,它将添加或删除这些列


我的问题是,在Package Manager控制台中运行update database命令后,模型本身是否会更新,或者我是否需要进行更改,如果需要,则需要进行什么更改,以及何时在模型中进行更改。

如果您更改生成的迁移代码,然后,您需要确保映射代码与数据库同步

如果您没有映射类,并且您使用约定而不是配置,那么您需要更改您的模型


如果您有映射代码或单独的映射类,则需要更新映射代码以与数据库同步。

您可以将列名属性添加到模型中,类型不是必需的。 这不是必需的,但如果遇到任何映射问题,则应正确映射列

[Column(“BlogDescription", TypeName="ntext")] 
public String Description {get;set;}
首先使用代码 姓名是:

public String FName {get; set;}
改为

public String FirstName {get; set;}
然后我运行命令 添加迁移UpdateColumnName 接命令 更新数据库
一切都应该正确映射。

所以我应该继续,通过再次运行相同的迁移来重新构建脚手架。然后,我运行updatedatabase命令。在此之后,模型中的属性会被重命名吗?这取决于,如果映射代码更改为支持新名称或列,则模型不需要更改。因此,模型可以具有旧列名?我可以在运行“更新数据库”命令后更改模型中的属性吗?我不知道情况是否如此。你能告诉我一些方向吗,这样我就知道我是否有了这些。我有一些迁移文件,其中添加了重命名列名的代码,但我没有看到你提供的代码。我的问题是,这个新的列名是如何出现的?在运行updatedatabase命令后,我是否应该通过写入新列名来手动更改它?如果我只是先使用代码重命名列,我只需要进入我的模型并更改字段名。保存并生成,打开pmc并运行命令add migration ChangeNameOnColumn,然后运行update Database更改模型中的字段名称并运行add,update migration命令将删除我以前的列并添加新列。这不是很有效吗?我想这会删除我以前的专栏,而不是重命名它。我想混淆的是,你正在重命名一个专栏,但谈论的是一个模型。字段映射到列,模型映射到表。所以DbSet是一个模型。类似CompanyName的内容将是模型公司的一列或“字段”。运行迁移只会更改数据库,而不会更改模型类。我的第一个添加列名属性的解决方案将解决您的问题,而无需手动更改任何迁移文件。