none
Atualizar entidade no banco somente com os campos modificados !!! RRS feed

  • Pergunta

  • Olá galera!

    To com um dúvida aqui e gostaria de uma ajuda!!!

    Então, eu passo para minha view através do controler a classe:

    Produto
    { id, nome, valor, senha_acesso }

    Sendo assim, na view, eu acesso esses valores fazendo o bind com os textboxes nome e valor;

    Ai eu altero o nome por exemplo.

    Quando recebo esses valores no metodo post do controller, a classe retorna com o "Id", "Nome" e "Valor" preenchidos corretamente. Agora o campo "senha_acesso" que não tinha bind na tela retorna nulo.

    Assim, quando tento atualizar meu modelo com o código:

    tableTbProduto.Attach( _ClasseProduto );
    tableTbProduto.Context.Refresh( RefreshMode.KeepCurrentValues, _ClasseProduto );
    tableTbProduto.Context.SubmitChanges();

    me retorna um erro, porque o campo esta nulo e ele não pode ser nulo! eu gostaria que ele mantesse o valor anterior!!! Não posso colocar na view um inputtext hidden porque a senha ficaria acessivel no código fonte!!!

    Tem como eu fazer as alterações sem atualizar esse campo ?

    eu pesquisei algumas coisas e vi que tem como marcar o campo não ser atualizado ou algo do tipo, mas não consegui implementar no meu codigo.

    obs.: Usando LinqToSQL, MVC 2

    Obrigado !!!!
    sexta-feira, 5 de fevereiro de 2010 01:03

Respostas

  • Fala Mordred,

    Normalmente é feito assim:

    Na Action que vai alterar os dados, carrega-se o objeto a ser alterado do BD e usa TryUpdateModel para atualizar esse objeto que você acabou de carregar, que na prática vai "tentar" atualizar as propriedades como os valores passados. Mas só serão alterados os valores que foram passados... Acho que é essa a sua necessidade, certo?

    Algo como (considerando a implementação do Repository Pattern ):

    Produto produto = Repositorio.ObtemProduto(123);

    TryUpdateModel(produto);

    Repositorio.Salva(produto);


    Forte abraço,

    André Borges Medeiros
    MCT, MCPD, MCTS

    >> Se a resposta solucionar sua dúvida, favor Votar como Útil
    sexta-feira, 5 de fevereiro de 2010 13:14
    Moderador

Todas as Respostas

  • Fala Mordred,

    Normalmente é feito assim:

    Na Action que vai alterar os dados, carrega-se o objeto a ser alterado do BD e usa TryUpdateModel para atualizar esse objeto que você acabou de carregar, que na prática vai "tentar" atualizar as propriedades como os valores passados. Mas só serão alterados os valores que foram passados... Acho que é essa a sua necessidade, certo?

    Algo como (considerando a implementação do Repository Pattern ):

    Produto produto = Repositorio.ObtemProduto(123);

    TryUpdateModel(produto);

    Repositorio.Salva(produto);


    Forte abraço,

    André Borges Medeiros
    MCT, MCPD, MCTS

    >> Se a resposta solucionar sua dúvida, favor Votar como Útil
    sexta-feira, 5 de fevereiro de 2010 13:14
    Moderador
  • Cara.....

    Os nomes dos seus "textbox" da View tem o mesmo nome dos campos da classe que vc passa certo ??

    Se sim, tenta mudar o nome da sua "textbox" que receber a senha e deixa uma nome diferente o  nome do banco !!!

    Ou....


    Cria na View um Hiden só para vc verificar se vc quer alterar ou não o campo, quando executar o POST da página, na action vc verifica esse hiden  e atualiza se quiser....assim vc não ve o valor no código apenas o hiden.


    Abs,

    sexta-feira, 5 de fevereiro de 2010 23:21