我正在为我的项目进行数据迁移。但我有一个问题,例如: 我有以下字段的Book表:
ID Name Color
1 Java red
2 MVC blue
3 .Net blue
我尝试使用Code First技术将字段名称从“Color”更改为“BookColor”。但是在迁移之后,表格看起来像这样:
ID Name BookColor
1 Java null
2 MVC null
3 .Net null
我丢失了我的字段值。我怎样才能确保所有价值都被转移?
我正在使用带有MVC3的实体框架
编辑这是我的DBMigration类:
public partial class AddCreative : DbMigration
{
public override void Up()
{
AddColumn("Authors", "Names", c => c.String(maxLength: 4000));
DropColumn("Authors", "Name");
}
public override void Down()
{
AddColumn("Authors", "Name", c => c.String(maxLength: 4000));
DropColumn("Authors", "Names");
}
}
我在更改后将Name
更改为Names
(我在名称字段中丢失了数据)。
答案 0 :(得分:6)
使用以下内容时没有问题:
首先,设置迁移:
PM> Enable-Migrations
PM> Add-Migration RenameBookColorColumn
然后我们设置迁移类来执行重命名:
public class RenameBookColorColumn : DbMigration
{
public override void Up()
{
this.RenameColumn("Books", "Color", "BookColor");
}
public override void Down()
{
this.RenameColumn("Books", "BookColor", "Color");
}
}
接下来,拨打Update-Database
,以便我们执行更改:
PM> Update-Database -Verbose
Using NuGet project 'Example'.
Using StartUp project 'ExampleTest'.
Target database is: 'ExampleContext' (DataSource: .\SQLEXPRESS, Provider: System.Data.SqlClient, Origin: Convention).
Applying explicit migrations: [201207051400010_RenameBookColorColumn].
Applying explicit migration: 201207051400010_RenameBookColorColumn.
EXECUTE sp_rename @objname = N'Books.Color', @newname = N'BookColor',
@objtype = N'COLUMN' [Inserting migration history record]
瞧,它被重命名,数据被保留。
答案 1 :(得分:1)
您可以使用以下代码解决限制。
public partial class AddCreative : DbMigration
{
public override void Up()
{
AddColumn("Authors", "Names", c => c.String(maxLength: 4000));
Sql("UPDATE [Authors] SET [Names] = [Name]");
DropColumn("Authors", "Name");
}
public override void Down()
{
AddColumn("Authors", "Name", c => c.String(maxLength: 4000));
Sql("UPDATE [Authors] SET [Name] = [Names]");
DropColumn("Authors", "Names");
}
}