O que estou perdendo?(Já existe uma entidade com a mesma identidade neste EntitySet.)
-
27-09-2019 - |
Pergunta
Estou usando DTOs e conversores em um cenário de estrutura de entidade.Quero atualizar uma entidade.Então coloquei esta afirmação:databasecontext.Tablename(s).Attach(entityobj);
Sempre que chega aqui o programa termina com este erro:An entity with the same identity already exists in this EntitySet
.
Eu senti que poderia contornar isso dizendo databasecontext.Tablename(s).Detach(entityobj);
antes de ligar para Attach novamente.Mas o programa ainda falha na instrução Attach.
o que estou perdendo?Qual método no contexto do banco de dados chama Update no serviço de domínio?
Solução
Parece que você está mantendo o contexto aberto enquanto faz as alterações.
Nesse caso, você não precisa recolocar o objeto para o contexto.
Se você abrir um contexto, obter um objeto de um contexto, feche o contexto, faça algumas alterações no objeto e abra um novo contexto. Nesse caso, você precisa anexar o objeto ao contexto.
Outras dicas
A questão não está clara.Você não mencionou quanto tempo dura o contexto do seu banco de dados e quando você carregou a entidade no contexto.
Mas com base na sua pergunta, acho que você carregou a entidade e a passou em algum lugar como DTO e quando o DTO é retornado você ainda está usando o mesmo contexto.Você converte DTO em entidade e está tentando anexá-lo novamente => exceção BANG.A mesma entidade não pode ser colocada duas vezes no contexto.Tente usar ObjectContext.ApplyCurrentValues (EF 4.0) ou ApplyPropertyChanges (EF 1.0).