none
Migrations - Atualizar campos RRS feed

  • Pergunta

  • Olá boa tarde galera

    Estou utilizando Migrations, que no meu ver é fantástico....
    criar classes e ver as tabelas se proliferar automaticamente é mágico...

    bom, minha dúvida é a seguinte

    acontece que agora tenho um campo que era nulo, mas criei uma regra que ele não pode mais ser nulo...
    já existem dados nesse campo como nulo.

    antes do migration criar essa regra no banco, preciso atualizar os campos que são nulo, caso contrario ele da o seguinte erro:

    Não é possível inserir o valor NULL na coluna 'Nome', tabela 'RepositorioMSDN.dbo.Cliente'; a coluna não permite nulos. Falha em UPDATE.
    A instrução foi finalizada.

    Onde devo criar essa atualização no migrations? 

    vi muitos sites e blogs ensinando como adicionar migrations, dar update no data base, somente o básico mesmo.. em nenhum vi explicarem esse caso.

    se puderem me ajudar, agradeço
    valew abraço..



    • Editado DevMaicon sexta-feira, 8 de julho de 2016 18:51
    sexta-feira, 8 de julho de 2016 18:50

Respostas

  • Bom, depois de muita pesquisa, encontrei no site msdn que fala sobre isso:
    https://msdn.microsoft.com/en-us/data/jj591621.aspx?f=255&MSPPError=-2147217396#sql

    No caso, ao atualizar uma coluna que antes era null e agora not null só acrescentar uma linha de update antes da alteração...

    public override void Up()
            {
                Sql("UPDATE dbo.Cliente SET Nome= '' WHERE Nome IS NULL");
                AlterColumn("dbo.Cliente", "Nome", c => c.String(nullable: false, maxLength: 100, unicode: false, defaultValue: ""));
            }
            
            public override void Down()
            {
                AlterColumn("dbo.Cliente", "Nome", c => c.String(maxLength: 100, unicode: false));
            }

    quando trocar uma coluna de nome.. o migration exclui a coluna e cria uma nova
    como fazer para que permaneça os dados que ja estavam?

    simples

    public override void Up()
            {
                AddColumn("dbo.Cliente", "UF", c => c.String(maxLength: 2, unicode: false));
               Sql("UPDATE dbo.Cliente SET UF = Estado"); // LINHA ADICIONADA
                DropColumn("dbo.Cliente", "Estado");
            }
            
            public override void Down()
            {
                AddColumn("dbo.Cliente", "Estado", c => c.String(maxLength: 2, unicode: false));
               Sql("UPDATE dbo.Cliente SET Estado = UF"); // LINHA ADICIONADA
                DropColumn("dbo.Cliente", "UF");
            }


    sábado, 9 de julho de 2016 19:34

Todas as Respostas

  • Se eu n me engano no migration ele deve destruir a sua coluna e adicionar uma nova caso você altere a estrutura, mas acredito que vc colocar o valor default ja resolveria o caso.

    nullable: false,

    e

    defaultValue: "Seila OQ"



    Diego Almeida Barreto</strong> <br/> <em>System Analyst / Software Developer</em> <br/> <img </p> </div>


    sexta-feira, 8 de julho de 2016 19:03
  • não deu certo... coloquei assim:
    AlterColumn("dbo.Cliente", "Nome", c => c.String(nullable: false, maxLength: 100, unicode: false, defaultValue: ""));

    • mas não funcionou. deu mesma mensagem de erro
    • esse foi apenas um exemplo
    • Nesse caso, ele não esta destruindo a coluna..

    Percebi que o migration destrói a coluna quando troca o nome da coluna.
    Esse já seria outro exemplo. Caso eu queira apenas trocar o nome da coluna, ele vai excluir o campo??
    Como faço para manter os dados do campo?


    • Editado DevMaicon sexta-feira, 8 de julho de 2016 20:12
    sexta-feira, 8 de julho de 2016 20:12
  • Bom, depois de muita pesquisa, encontrei no site msdn que fala sobre isso:
    https://msdn.microsoft.com/en-us/data/jj591621.aspx?f=255&MSPPError=-2147217396#sql

    No caso, ao atualizar uma coluna que antes era null e agora not null só acrescentar uma linha de update antes da alteração...

    public override void Up()
            {
                Sql("UPDATE dbo.Cliente SET Nome= '' WHERE Nome IS NULL");
                AlterColumn("dbo.Cliente", "Nome", c => c.String(nullable: false, maxLength: 100, unicode: false, defaultValue: ""));
            }
            
            public override void Down()
            {
                AlterColumn("dbo.Cliente", "Nome", c => c.String(maxLength: 100, unicode: false));
            }

    quando trocar uma coluna de nome.. o migration exclui a coluna e cria uma nova
    como fazer para que permaneça os dados que ja estavam?

    simples

    public override void Up()
            {
                AddColumn("dbo.Cliente", "UF", c => c.String(maxLength: 2, unicode: false));
               Sql("UPDATE dbo.Cliente SET UF = Estado"); // LINHA ADICIONADA
                DropColumn("dbo.Cliente", "Estado");
            }
            
            public override void Down()
            {
                AddColumn("dbo.Cliente", "Estado", c => c.String(maxLength: 2, unicode: false));
               Sql("UPDATE dbo.Cliente SET Estado = UF"); // LINHA ADICIONADA
                DropColumn("dbo.Cliente", "UF");
            }


    sábado, 9 de julho de 2016 19:34