none
Ajuda com comparação de campos dentro do mesmo registro

    Pergunta

  • Olá Pessoal, boa tarde/noite. 

    Pessoal, to com problema em uma tarefa que acredito não ser muito complicada. É o seguinte. Na mesma ActionResult de edição de uma entidade preciso conferir os campos dos novos valores da entidade com os valores antigos (antes de salvar) para comparar quais foram foram alterados porém quando eu crio uma nova instancia filtrando pelo ID da instancia que esta sendo passada como parâmetro esta duplicando os campos para as duas entidades.

    Na pratica seria algo como:

    public ActionResult Edit(User user) {
    //aqui estaria criando uma cópia de registro conforme o id do usuário passado no parâmetro (antes de salvar as alterações)
    var userBase = user;
    
    //compararia o valor da propriedade do objeto passado via parametro com o objeto criado com a referencia do Id do objeto do parametro
    if(user.Name != userBase.Name) {
     //... se estiver diferente salvaria em outra tabela
    }
    //.... demais comandos e salvaria o registro
    db.Users.add(user);
    db.SaveChanges();
    
    }

    O problema é que mesmo criando uma cópia sem alteração do objeto, na hora de comparar os valores está sendo os mesmo valores para os dois objetos (mesmo que eu não efetuado o "db.SaveChanges()" antes.

    E se eu instanciar um novo objeto usando o id do usuário passado em parâmetro, por exemplo:

    var userBase = db.Users.where(x => x.UserId == user.UserId).first(); 

    Se eu mandar executar me retorna o seguinte erro:

    An object with the same key already exists in the ObjectStateManager. The ObjectStateManager cannot track multiple objects with the same key.

    Alguem poderia me ajudar?

    Obrigado


    quinta-feira, 12 de setembro de 2013 20:05

Todas as Respostas

  • Ninguem sabe??
    quinta-feira, 12 de setembro de 2013 23:40
  • Ninguem sabe??

    Se pode colocar o código na integra!

    é qual o motivo dessa verificação ???


    Fúlvio Cezar Canducci Dias

    quinta-feira, 12 de setembro de 2013 23:45
  • Eu teria que  ver o resto do código, pelo que eu vi você está tentando inserir um item com uma PK que já existe, se for update você não pode usar o ADD, primeiro você tem que trazer o registro por um where (do jeito que você usou)  e depois alterar a classe retornada usando o comando SubmitChanges.

    Outra coisa, até aonde eu lembro add funciona em par com InsertSubmitChanges.

     



    sexta-feira, 13 de setembro de 2013 17:29