Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

O Add-Migration Unidade ao invés de renomear o Preco para PrecoUnitário está fazendo DropColumn e AddColumn

Olá, fazendo o processo descrito, o Migration Tool está fazendo a alteração como um Drop e Add ao invés de fazer o rename.A tabela está populada e haverá perda dos dados do preço. O que devo estar fazendo errado?

`PM> Add-Migration Unidade\n Build started... Build succeeded. An operation was scaffolded that may result in the loss of data. Please review the migration for accuracy. To undo this action, use Remove-Migration. PM>

      protected override void Up(MigrationBuilder migrationBuilder)
        {
            migrationBuilder.DropColumn(
                name: "Preco",
                table: "Produtos");

            migrationBuilder.AddColumn<double>(
                name: "PrecoUnitario",
                table: "Produtos",
                nullable: false,
                defaultValue: 0.0);

            migrationBuilder.AddColumn<string>(
                name: "Unidade",
                table: "Produtos",
                nullable: true);
        }
3 respostas

Olá Darci, tudo bem?

Na verdade não está fazendo nada de errado, apenas tem vezes que o Entity Framework resolve não alterar o nome da coluna mesmo que todos as propriedades da coluna sejam iguais às da coluna "nova".

Neste caso, para conseguir acompanhar o curso com o modelo e as tabelas com os nomes iguais, minha sugestão é editar manualmente o código gerado na migração dentro da função UP. Apague o conteúdo das duas primeiras funções e adicione o seguinte código:

migrationBuilder.RenameColumn(
    name: "Preco",
    table: "Produtos",
    newName: "PrecoUnitario");

Este código será referente a renomeação da coluna Preco para PrecoUnitario dentro da tabela Produtos.

Para voltar para o estado anterior do banco de dados, é necessário que na função DOWN não tenha os comandos para apagar a coluna nova e subir a antiga, e também contenha o seguinte código:

migrationBuilder.RenameColumn(
    name: "PrecoUnitario",
    table: "Produtos",
    newName: "Preco");

Espero ter ajudado!

Legal. Assim resolve. Pensei que tivesse algum impedimento em alterar este código, já que o instrutor sempre alterava o método OnModelCreating para que o Migration Tool criasse o migrationBuilder corretamente.

Para continuar com o curso já apliquei a alteração do jeito que estava mesmo, recriando a coluna e coloquei os valores na coluna preço direto no SQL.

solução!

Realmente Darci, normalmente vamos encontrar vários jeitos para alcançar o mesmo resultado. Nem sempre esses códigos gerados automaticamente fazem o que realmente queremos. Muitas vezes temos que adaptá-los às nossas necessidades.

Mas que bom que conseguiu encontrar a solução, essas tentativas e erros nos garantem um aprendizado cada vez mais solido.

Bons estudos!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software