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

时间:2015-10-14 19:44:58

标签: entity-framework ef-migrations

我必须在我的数据库中重命名2列。我正在使用代码优先迁移。 因此,我将以下代码添加到我在Package Manager控制台中运行'add-migration migration_name'命令后创建的迁移文件中的up()方法中。(/ p>

代码

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

我没有对我的模型进行任何更改,因为如果我在模型中添加或删除任何属性,它将添加或删除这些列。

我的问题是在软件包管理器控制台中运行update-database命令之后,模型本身是否会更新,或者我是否需要进行更改,如果是,那么更改以及何时在模型中进行更改。

2 个答案:

答案 0 :(得分:1)

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

如果您没有映射类,并且使用约定优于配置,那么您需要更改模型。

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

答案 1 :(得分:0)

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

[Column(“BlogDescription", TypeName="ntext")] 
public String Description {get;set;}

使用Code First 名字是:

public String FName {get; set;}

已更改为

public String FirstName {get; set;}

然后我运行命令     添加迁移UpdateColumnName 然后是命令     更新数据库 一切都应该正确映射。