How to do a Code First migration without deleting data from the table attribute?

2

I need to change the name of the Weight attribute to Product Weight , this is the code that is generated after running the add-migration command:

namespace Web.Dominio.Migrations
{
    using System;
    using System.Data.Entity.Migrations;

    public partial class alterar_Peso_para_PesoProduto_em_Produto : DbMigration
    {
        public override void Up()
        {
            AddColumn("dbo.Produto", "PesoProduto", c => c.Decimal(precision: 18, scale: 2));
            DropColumn("dbo.Produto", "Peso");
        }

        public override void Down()
        {
            AddColumn("dbo.Produto", "Peso", c => c.Decimal(precision: 18, scale: 2));
            DropColumn("dbo.Produto", "PesoProduto");
        }
    }
}
The problem is that the data in the column is deleted and I do not want to delete the data I want to change only the name of the table attribute.

    
asked by anonymous 30.10.2016 / 20:09

2 answers

3

You will need to manually edit the generated migration, replacing Add and Drop with Rename :

public override void Up()
{
    //AddColumn("dbo.Produto", "PesoProduto", c => c.Decimal(precision: 18, scale: 2));
    //DropColumn("dbo.Produto", "Peso");

    // Vira
    RenameColumn("dbo.[Produtos]", "Peso", "PesoProduto");
}

public override void Down()
{
    //AddColumn("dbo.Produto", "Peso", c => c.Decimal(precision: 18, scale: 2));
    //DropColumn("dbo.Produto", "PesoProduto");

    RenameColumn("dbo.[Produtos]", "PesoProduto", "Peso");
}
    
30.10.2016 / 20:34
2

In the Up and Down method, clear the code and place RenameColumn ", with the paramentos in sequence in the Up method:

  
  • Nome da tabela
  •   
  • Nome atual do campo da tabela
  •   
  • Novo nome para o campo da tabela
  •   

In the example below for your problem:

public partial class alter_coluna_peso_pesoproduto : DbMigration
{
    public override void Up()
    {           
        RenameColumn("dbo.Produto", "Peso", "PesoProduto");
    }

    public override void Down()
    {

    }
}

References:

30.10.2016 / 20:37