我使用EF5.0 Code First Migrations成功地运行了默认的ASP.NET MVC4模板。但是,当我更新模型属性名称时,EF 5.0丢弃了相应的表列数据。
有没有可能在不以自动方式删除数据的情况下重命名表列?
发布于 2012-11-29 08:41:26
手动编辑迁移的Up和Down方法,使用RenameColumn方法替换它自动为您生成的AddColumn和DropColumn。
发布于 2015-12-24 07:03:52
As already said,将自动生成的AddColumn和DropColumn替换为RenameColumn。
示例:
namespace MyProject.Model.Migrations
{
using System;
using System.Data.Entity.Migrations;
public partial class RenameMyColumn : DbMigration
{
public override void Up()
{
// Remove the following auto-generated lines
AddColumn("dbo.MyTable", "NewColumn", c => c.String(nullable: false, maxLength: 50));
DropColumn("dbo.MyTable", "OldColumn");
// Add this line
RenameColumn("dbo.MyTable", "OldColumn", "NewColumn");
}
public override void Down()
{
// Remove the following auto-generated lines
AddColumn("dbo.MyTable", "OldColumn", c => c.String(nullable: false, maxLength: 50));
DropColumn("dbo.MyTable", "NewColumn");
// Add this line
RenameColumn("dbo.MyTable", "NewColumn", "OldColumn");
}
}
}发布于 2017-01-20 03:31:37
如果您这样做,您可以让迁移为您调用RenameColumn:
[Column("NewName")]
public string OldName { get; set; }下面是生成的迁移:
public override void Up()
{
RenameColumn(table: "Schema.MyTable", name: "OldName", newName: "NewName");
}
public override void Down()
{
RenameColumn(table: "Schema.MyTable", name: "NewName", newName: "OldName");
}如果希望特性和DB列具有相同的名称,可以稍后重命名特性并删除Column属性。
https://stackoverflow.com/questions/13104592
复制相似问题